Дошли у меня руки до менеджера потоков, который может защищать данные при доступе из разных потоков, но возник вопрос -- синхронный с рабочим потоком доступ успешно защищается (onExec), нужно ли защищать доступ, синхронный с главным потоком (onSyncEcec)
------------ Дoбавленo:
А че, никому не интересно
Будем и дальше ловить глюки с мультипоточностью в плане совместного доступа к данным
------------ Дoбавленo:
К черту менеджер, вот что получилось. Жду критику и предложения по усовершенствованию
------------ Дoбавленo:
А почему, кстати, даже штатный поток отвратительно ведет себя из-под FPC
Этот топик читают: Гость
Разработчик
Ответов: 26151
Рейтинг: 2127
|
|||
карма: 22 |
| ||
файлы: 1 | project_mutexthread_1_00.zip [3.6KB] [247] |
Ответов: 1088
Рейтинг: 112
|
|||
nesco писал(а): А че, никому не интересно
Будем и дальше ловить глюки с мультипоточностью в плане совместного доступа к данным Просто не все сталкивались с проблемами потоков и просто с потоками Пример работает нормально. Тк с потоками проблем у меня небыло то и протестировать я его не могу... |
|||
карма: 0 |
|
Ответов: 3655
Рейтинг: 69
|
|||
Sniper36 писал(а): Просто не все сталкивались с проблемами потоков и просто с потоками согласен. Для меня вообще например вопрос: о какой многопоточности можно говорить при одном процессоре. всё равно одно тормозит другое. |
|||
карма: 0 |
|
Ответов: 3514
Рейтинг: 184
|
|||
nesco, а зачем потоки защищать?
|
|||
карма: 0 |
|
Ответов: 1088
Рейтинг: 112
|
|||
Вячеслав, http://www.realcoding.net/article/view/101
|
|||
карма: 0 |
|
Разработчик
Ответов: 26151
Рейтинг: 2127
|
|||
Астрамак писал(а): а зачем потоки защищать?Потоки работают зависимо от ресурсов и приоритетов системы и не всегда зависимо от твоего приложения. По-этому, создав поток, мы отдаем управление системе. Один поток в одно время может выполнять длинный цикл, а другой, в это же время, может рисовать картинки. Синхронизация же потоков нужна тогда, когда разные потоки пытаются влезть в одни данные -- один может писать какой-то массив, и другому, вдруг, приспичило писать туда же ------------ Дoбавленo: Вот, интересна будет новая версия -- 2.00. Тут потки выполняют некоторые действия в режиме ожидания, что бы не простаивать впустую |
|||
карма: 22 |
| ||
файлы: 1 | project_mutexthread_2_00.zip [3.9KB] [225] | ||
Голосовали: | Konst |
Ответов: 3655
Рейтинг: 69
|
|||
Sniper36 писал(а): http://www.realcoding.net/article/view/101Так вот главная фича в потоках в том, что они могут выполняться почти параллельно (или по научному псевдопараллельно) именно почти, а не совсем. На самом деле настоящая параллельность возможна только на многопроцессорной машине (2 и более проца).
Я как раз про это. То есть вся поточность виртуальна. |
|||
карма: 0 |
|
Разработчик
Ответов: 26151
Рейтинг: 2127
|
|||
Вячеслав, посмотри, сколько процессор у тебя висит впустую, процентов 95, точно. Даже згрузив его еще на двадцать сильно ты этого не заметишь. Почитай мой пост выше и ты поймешь, для чего нужна многопоточность. При одном потоке ты не сможешь выполнять цикл и рисовать картинку. Пока не закончишь цикл, не сможешь и окно нормально отрисовать, не говоря про отрисовку картинки. Все действия в одном потоке выполняются последовательно, и он также прерывается, но только ты этого не замечаешь. Так вот во время этого прерывания системой можно кучу всего сделать,
|
|||
карма: 22 |
| ||
Голосовали: | Konst |
Ответов: 3655
Рейтинг: 69
|
|||
nesco писал(а): Тут потки выполняют некоторые действия в режиме ожидания, что бы не простаивать впустуюВот это интерестно. Но только если бы сам комп этим занимался. Например для проверки компа на вирусы надо запустить сам антивирус. А он сильно тормозит систему. Вот бы он сам проверял пока комп незанят,и занимал бы 1% проца когда занят. Но к сожалению не всё так гладко так как помимо проца он занимает ещё и HDD память и так далее. Так вот твоя программа созданная многопоточной могла бы работать так как этого хочется только при условии что у неё будет собственный HDD . А в реале сколько, я ни пробовал запускать программы работающие в фоновом режиме постоянно, все они когда нибудь заметно тормозят комп. Я конечно согласен что пока идёт отрисовка можно и цикл выполнить но где гарантия что пока идёт отрисовка цикл успеет закончится. Вот смотрю сейчас загрузка проца 2-4% процессов 43(уже) И твои ещё прибавятся итого 45 пускай загрузка проца будет 10% Так откуда же появляются периодические тормоза. Да просто HDD - то они используют один. Вообщем кто мне покажет загрузку HDD |
|||
карма: 0 |
|
Ответов: 16884
Рейтинг: 1239
|
|||
Компонент нужный, но пример, извини, - черт ногу сломает + ни одного коментария... и что там паралельно выполняется - мигание светодиодов ?
------------ Дoбавленo: Нарисуй, если не в лом, движение точки по диагонали, чтобы один For выдавал X, а другой паралельно Y У меня не получается |
|||
карма: 25 |
|
Ответов: 3851
Рейтинг: 159
|
|||
Вячеслав писал(а): Вообщем кто мне покажет загрузку HDD ? nesco, если можно на пальцах - чем оно лучше (или будет лучше?) чем сегодняшняя реализация, с учётом того, что защиту от совместного доступа Dilma тоже где-то показывал.. ------------ Дoбавленo: многоядерность пока побарабану? |
|||
карма: 0 |
|
Разработчик
Ответов: 26151
Рейтинг: 2127
|
|||
Tad писал(а): и что там паралельно выполняется - мигание светодиодов ?Это пример защиты доступа к одним данным. Цмкл успевает досчитает до конца, второй и тетий поток ждут окончани счета. Видишь, пока сетодиоды могргают -- это цикл ожидания счета в первом потоке. Попробуй собрать такое на штатнх потоках, данные не будут посчитаны до конца, а первый и второй поток считают только их часть. Это пример, когда один пишит, а другие читают, может быть ситуация, когда несколько будут пытаться писать или запускать цикл. ------------ Дoбавленo: Андрей. писал(а): с учётом того, что защиту от совместного доступа Dilma тоже где-то показывал..Это реализуется на Mutexе (можно и на UDP, но это уже -- извращение). Но когда потоков нужно несколько, а не два, вот тогда защити одним Mutexом все потоки, да и он не защищает, а просто создается, и мы контролируем попытку создания еще одного, это немного не то, когда уже запущенный Mutex ставит потоки в очередь. Принцип другой, это реализация распределения доступа на элементах ядра, а не на разных сторонних приблудах. |
|||
карма: 22 |
|
Администрация
Ответов: 15295
Рейтинг: 1519
|
|||
Вячеслав писал(а): о какой многопоточности можно говорить при одном процессоре.
всё равно одно тормозит другое. вообще-то в потоках никогда не реализуют то, что отнимает заведомо больше времени, чем выполнение основного процесса. В некоторых элементах HiAsm потоки уже встроены и поэтому если их нет в явном виде в схеме то это не значит, что они не используются вообще. |
|||
карма: 27 |
|
Ответов: 16884
Рейтинг: 1239
|
|||
nesco, выбросил из твоего примера все три MutExThread. Хаб прекрасно справляется с их работой. Единственное - светодиоды не моргают, но если это очень нужно, то можно организовать (на "штатных компонентах")
В HiAsm нет возможности запустить одновременно (от одного Event) несколько потоков - только через Hub который и определяет очередность. А может есть ? ------------ Дoбавленo: Андрей. писал(а): с учётом того, что защиту от совместного доступа |
|||
карма: 25 |
|
Ответов: 3655
Рейтинг: 69
|
|||
Dilma писал(а): вообще-то в потоках никогда не реализуют то, что отнимает заведомо больше времениА по какому критерию определять что можно пустить в поток ,а что нет |
|||
карма: 0 |
|