Вверх ↑
Этот топик читают: Гость
Разработчик
Ответов: 26151
Рейтинг: 2127
#1: 2008-12-05 14:46:34 ЛС | профиль | цитата
Дошли у меня руки до менеджера потоков, который может защищать данные при доступе из разных потоков, но возник вопрос -- синхронный с рабочим потоком доступ успешно защищается (onExec), нужно ли защищать доступ, синхронный с главным потоком (onSyncEcec)

------------ Дoбавленo:


А че, никому не интересно
Будем и дальше ловить глюки с мультипоточностью в плане совместного доступа к данным

------------ Дoбавленo:


К черту менеджер, вот что получилось. Жду критику и предложения по усовершенствованию
------------ Дoбавленo:

А почему, кстати, даже штатный поток отвратительно ведет себя из-под FPC
карма: 22

0
файлы: 1project_mutexthread_1_00.zip [3.6KB] [247]
Ответов: 1088
Рейтинг: 112
#2: 2008-12-05 16:01:29 ЛС | профиль | цитата
nesco писал(а):
А че, никому не интересно
Будем и дальше ловить глюки с мультипоточностью в плане совместного доступа к данным

Просто не все сталкивались с проблемами потоков и просто с потоками

Пример работает нормально. Тк с потоками проблем у меня небыло то и протестировать я его не могу...
карма: 0
Время верстки: %cr_time% Текущее время: %time%
0
Ответов: 3655
Рейтинг: 69
#3: 2008-12-05 17:07:28 ЛС | профиль | цитата
Sniper36 писал(а):
Просто не все сталкивались с проблемами потоков и просто с потоками

согласен.
Для меня вообще например вопрос:
о какой многопоточности можно говорить при одном процессоре.
всё равно одно тормозит другое.

карма: 0

0
Ответов: 3514
Рейтинг: 184
#4: 2008-12-05 17:09:42 ЛС | профиль | цитата
nesco, а зачем потоки защищать?
карма: 0
0
Ответов: 1088
Рейтинг: 112
#5: 2008-12-05 17:14:45 ЛС | профиль | цитата
Вячеслав, http://www.realcoding.net/article/view/101
карма: 0
Время верстки: %cr_time% Текущее время: %time%
0
Разработчик
Ответов: 26151
Рейтинг: 2127
#6: 2008-12-05 17:20:06 ЛС | профиль | цитата
Астрамак писал(а):
а зачем потоки защищать?

Потоки работают зависимо от ресурсов и приоритетов системы и не всегда зависимо от твоего приложения. По-этому, создав поток, мы отдаем управление системе. Один поток в одно время может выполнять длинный цикл, а другой, в это же время, может рисовать картинки. Синхронизация же потоков нужна тогда, когда разные потоки пытаются влезть в одни данные -- один может писать какой-то массив, и другому, вдруг, приспичило писать туда же
------------ Дoбавленo:

Вот, интересна будет новая версия -- 2.00. Тут потки выполняют некоторые действия в режиме ожидания, что бы не простаивать впустую


карма: 22

1
файлы: 1project_mutexthread_2_00.zip [3.9KB] [225]
Голосовали:Konst
Ответов: 3655
Рейтинг: 69
#7: 2008-12-05 17:21:34 ЛС | профиль | цитата
Sniper36 писал(а):
http://www.realcoding.net/article/view/101

Так вот главная фича в потоках в том, что они могут выполняться почти параллельно (или по научному псевдопараллельно) именно почти, а не совсем. На самом деле настоящая параллельность возможна только на многопроцессорной машине (2 и более проца).

Я как раз про это.
То есть вся поточность виртуальна.
карма: 0

0
Разработчик
Ответов: 26151
Рейтинг: 2127
#8: 2008-12-05 17:28:05 ЛС | профиль | цитата
Вячеслав, посмотри, сколько процессор у тебя висит впустую, процентов 95, точно. Даже згрузив его еще на двадцать сильно ты этого не заметишь. Почитай мой пост выше и ты поймешь, для чего нужна многопоточность. При одном потоке ты не сможешь выполнять цикл и рисовать картинку. Пока не закончишь цикл, не сможешь и окно нормально отрисовать, не говоря про отрисовку картинки. Все действия в одном потоке выполняются последовательно, и он также прерывается, но только ты этого не замечаешь. Так вот во время этого прерывания системой можно кучу всего сделать,
карма: 22

1
Голосовали:Konst
Ответов: 3655
Рейтинг: 69
#9: 2008-12-05 18:25:11 ЛС | профиль | цитата
nesco писал(а):
Тут потки выполняют некоторые действия в режиме ожидания, что бы не простаивать впустую

Вот это интерестно.
Но только если бы сам комп этим занимался.
Например для проверки компа на вирусы надо запустить сам антивирус.
А он сильно тормозит систему.
Вот бы он сам проверял пока комп незанят,и занимал бы 1% проца когда занят.
Но к сожалению не всё так гладко так как помимо проца он занимает ещё и HDD
память и так далее.
Так вот твоя программа созданная многопоточной могла бы работать так как этого
хочется только при условии что у неё будет собственный HDD .
А в реале сколько, я ни пробовал запускать программы работающие в фоновом режиме
постоянно, все они когда нибудь заметно тормозят комп.
Я конечно согласен что пока идёт отрисовка можно и цикл выполнить но где гарантия что пока
идёт отрисовка цикл успеет закончится.
Вот смотрю сейчас
загрузка проца 2-4%
процессов 43(уже)
И твои ещё прибавятся итого 45
пускай загрузка проца будет 10%
Так откуда же появляются периодические тормоза.
Да просто HDD - то они используют один.
Вообщем кто мне покажет загрузку HDD
карма: 0

0
Ответов: 16884
Рейтинг: 1239
#10: 2008-12-05 18:43:00 ЛС | профиль | цитата
Компонент нужный, но пример, извини, - черт ногу сломает + ни одного коментария... и что там паралельно выполняется - мигание светодиодов ?
------------ Дoбавленo:

Нарисуй, если не в лом, движение точки по диагонали, чтобы один For выдавал X, а другой паралельно Y
У меня не получается
карма: 25
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
0
Ответов: 3851
Рейтинг: 159
#11: 2008-12-05 18:49:29 ЛС | профиль | цитата
Вячеслав писал(а):
Вообщем кто мне покажет загрузку HDD ?
светодиод

nesco, если можно на пальцах - чем оно лучше (или будет лучше?) чем сегодняшняя реализация, с учётом того, что защиту от совместного доступа Dilma тоже где-то показывал..
------------ Дoбавленo:

многоядерность пока побарабану?
карма: 0
начавший
0
Разработчик
Ответов: 26151
Рейтинг: 2127
#12: 2008-12-05 18:56:41 ЛС | профиль | цитата
Tad писал(а):
и что там паралельно выполняется - мигание светодиодов ?

Это пример защиты доступа к одним данным. Цмкл успевает досчитает до конца, второй и тетий поток ждут окончани счета. Видишь, пока сетодиоды могргают -- это цикл ожидания счета в первом потоке. Попробуй собрать такое на штатнх потоках, данные не будут посчитаны до конца, а первый и второй поток считают только их часть. Это пример, когда один пишит, а другие читают, может быть ситуация, когда несколько будут пытаться писать или запускать цикл.

------------ Дoбавленo:


Андрей. писал(а):
с учётом того, что защиту от совместного доступа Dilma тоже где-то показывал..

Это реализуется на Mutexе (можно и на UDP, но это уже -- извращение). Но когда потоков нужно несколько, а не два, вот тогда защити одним Mutexом все потоки, да и он не защищает, а просто создается, и мы контролируем попытку создания еще одного, это немного не то, когда уже запущенный Mutex ставит потоки в очередь. Принцип другой, это реализация распределения доступа на элементах ядра, а не на разных сторонних приблудах.
карма: 22

0
Администрация
Ответов: 15295
Рейтинг: 1519
#13: 2008-12-05 22:06:05 ЛС | профиль | цитата
Вячеслав писал(а):
о какой многопоточности можно говорить при одном процессоре.
всё равно одно тормозит другое.

вообще-то в потоках никогда не реализуют то, что отнимает заведомо больше времени, чем выполнение основного процесса. В некоторых элементах HiAsm потоки уже встроены и поэтому если их нет в явном виде в схеме то это не значит, что они не используются вообще.
карма: 27
0
Ответов: 16884
Рейтинг: 1239
#14: 2008-12-05 22:41:26 ЛС | профиль | цитата
nesco, выбросил из твоего примера все три MutExThread. Хаб прекрасно справляется с их работой. Единственное - светодиоды не моргают, но если это очень нужно, то можно организовать (на "штатных компонентах")
В HiAsm нет возможности запустить одновременно (от одного Event) несколько потоков - только через Hub который и определяет очередность. А может есть ?
------------ Дoбавленo:

Андрей. писал(а):
с учётом того, что защиту от совместного доступа
хотелось бы увидеть пример организации совместного доступа, а потом можно подумать и о защите.
карма: 25
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
0
Ответов: 3655
Рейтинг: 69
#15: 2008-12-05 23:10:50 ЛС | профиль | цитата
Dilma писал(а):
вообще-то в потоках никогда не реализуют то, что отнимает заведомо больше времени

А по какому критерию определять что можно пустить в поток ,а что нет
карма: 0

0
Сообщение
...
Прикрепленные файлы
(файлы не залиты)