![]() |
|
Модераторы: korob2001, ginnie |
![]()
|
|
| AlexPet |
|
||||||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 93 Регистрация: 5.12.2007 Где: Брянск Репутация: 1 Всего: 1 |
Берем пример по нитям с intuit.ru:
Так вот, при запуске в MSWin32 все нормально, в стандартный поток вывода будет послано
Однако, при запуске в Линуксе (2.6.24-gentoo-r8), на выходе ничего не будет. Тем не менее, если мы строку
перенесем пониже, уже после занесения в очередь данных, то вывод будет аналогичен примеру выше. Такое ощущение, что нить отрабатывает раньше, чем в очередь были занесены данные, однако же нить должна (?) ждать метода join или detach... Не подскажете, в чем дело? |
||||||
|
|||||||
| sir_nuf_nuf |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 920 Регистрация: 6.1.2008 Репутация: 14 Всего: 31 |
очень правильное ощущение. так и есть. нет, созданная нить не должна. Она отрабатывает и все. Ждать должна основная нить. А работать по разному может даже на одной ОС. Тут дело в алгоритме schedulerа. У линукса есть такая фичи - при создании нового потока/процесса - предпочтение отдается ему.. Уже не помню зачем так сделано. В виндовс, видимо, нет. Локальное решение: используйте семафор для синхронизации, или какую-нть shared-переменную - флажок. P.S. потоки в perl - не самое надежное средство. Если нужно написать что то надежное - то лучше писать на процессах (и/или) POE |
|||
|
||||
| AlexPet |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 93 Регистрация: 5.12.2007 Где: Брянск Репутация: 1 Всего: 1 |
sir_nuf_nuf, благодарю за подробное разъяснение! Догадывался, что дело в разницу в ядре ОС, но про планировщик (scheduler) не знал.
"на процессах" - имеется в виду fork() ? Тяжеловато получится, наверное. А вообще да, наслышан про POE, но еще не приходилось применять. Послушал на YAPC 2008 про него, там было тааакое количество инфы в единицу времени, что мне стало немного не по себе |
|||
|
||||
| ginnie |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 1287 Регистрация: 6.1.2008 Где: Москва Репутация: 38 Всего: 49 |
Уважаемый sir_nuf_nuf, наверное не POE, а событийную машину (event-driven programming)?
-------------------- Написать код, понятный компьютеру, может каждый, но только хорошие программисты пишут код, понятный людям. (Мартин Фаулер. Рефакторинг) |
|||
|
||||
| AlexPet |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 93 Регистрация: 5.12.2007 Где: Брянск Репутация: 1 Всего: 1 |
Кстати, раз уж заговорили о событийных машинах - не подскажете, с чего начать?
А то POE кажется уж больно навороченной и (по отзывам) медленной. Хотелось бы чего-нибудь сходного с threads, но более предсказуемо себя ведущего |
|||
|
||||
| ginnie |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 1287 Регистрация: 6.1.2008 Где: Москва Репутация: 38 Всего: 49 |
AlexPet, предлагаю взять реальную задачу и попробовать EV. Быстрее EV врядли что-нибудь найдете. По сравлению с POE у EV один недостаток - многое надо будет написать своими руками
-------------------- Написать код, понятный компьютеру, может каждый, но только хорошие программисты пишут код, понятный людям. (Мартин Фаулер. Рефакторинг) |
|||
|
||||
| AlexPet |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 93 Регистрация: 5.12.2007 Где: Брянск Репутация: 1 Всего: 1 |
ginnie, спасибо за совет! Нужно же с чего-то начинать
|
|||
|
||||
![]()
|
| Правила форума "Perl" | |
|
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Perl: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |