![]() |
|
Модераторы: korob2001, ginnie |
![]()
|
|
| nIkTo |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 218 Регистрация: 5.7.2007 Репутация: нет Всего: нет |
Можно ли так сделать :
хешь с данными обьявляем как our создаём потоки (fork) из каждого потока работаем с хешем (не изменяем его) может есть возможность блокировать хешь пока один тред не закончит с ним работу .... Подскажите, вопрос очень важный. |
|||
|
||||
| mvsgt |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 209 Регистрация: 27.3.2009 Репутация: 1 Всего: 1 |
fork потоки не создаёт; в виндусовом может создавать - но вообще говоря fork это не потоки а копии процесса со своей версией данных.
http://search.cpan.org/~jdhedden/threads-s...-1.32/shared.pm |
|||
|
||||
| nIkTo |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 218 Регистрация: 5.7.2007 Репутация: нет Всего: нет |
Соответственно задам избитый (наверное) вопрос: каким способом экономичнее, с точки зрения расходования оперативной памяти, реализовывать многопоточность в Perl.
1. fork 2. use threads; спасибо. |
|||
|
||||
| shamber |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1422 Регистрация: 5.9.2006 Где: Россия Репутация: 17 Всего: 18 |
||||
|
||||
| nIkTo |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 218 Регистрация: 5.7.2007 Репутация: нет Всего: нет |
*nix like ОС
|
|||
|
||||
| mvsgt |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 209 Регистрация: 27.3.2009 Репутация: 1 Всего: 1 |
||||
|
||||
| nIkTo |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 218 Регистрация: 5.7.2007 Репутация: нет Всего: нет |
mvsgt а что посоветуешь, как дешевле всего выполнять параллельно несколько потоков ?
|
|||
|
||||
| mvsgt |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 209 Регистрация: 27.3.2009 Репутация: 1 Всего: 1 |
А о каком вообще количестве потоков речь?
|
|||
|
||||
| nIkTo |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 218 Регистрация: 5.7.2007 Репутация: нет Всего: нет |
50-100
ну это относительно, сейчас машина с 1гб озу, есле будет больше озу то и потоков следовательно надо больше .... Это сообщение отредактировал(а) nIkTo - 12.11.2009, 01:39 |
|||
|
||||
| mvsgt |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 209 Регистрация: 27.3.2009 Репутация: 1 Всего: 1 |
поток можно оценить в 5 мегабайт. Но надо и процессор учитывать, если много потоков и они что-то активно делают.
А вот потоки в каком-нибудь curl гораздо легче, на порядки. |
|||
|
||||
| nIkTo |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 218 Регистрация: 5.7.2007 Репутация: нет Всего: нет |
К примеру запускаю тестовый скрипт :
Вот что показывает htop : ![]() я так понимаю что скрипт расходует (включая все потоки) 3,6% памяти, тоесть ~ 36 Мб, значит ~ 0,36 Мб на поток Может и дурацкий вопрос, но за что отвечает 'stack_size' ? Понятно что это размер стека, но вот какой конкретно размер нужен(желателен) ? как его определить ? Это сообщение отредактировал(а) nIkTo - 12.11.2009, 02:07 |
|||
|
||||
| Bulat |
|
|||
![]() татарский Нео ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1701 Регистрация: 22.3.2006 Где: Альметьевск Репутация: 5 Всего: 57 |
fork - если быть предельно корректным - ветвление, а многопоточность это немного иное. И разница в функциональных возможностях у них разная. И тут все зависит от выбора верного инструмента для решения задачи. А так может и то и другое -------------------- менеджер по кодеврайтингу |
|||
|
||||
| nIkTo |
|
||||||||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 218 Регистрация: 5.7.2007 Репутация: нет Всего: нет |
Bulat, можешь на примерах задачь показать, для задачь какого типа стоит использовать fork, а для каких threads ? И по какому критерию надо определять каким "инструментом" работать?
Иначе ваши слова пустой звук не раскрывающий суть вопроса, так как если быть предельно корректным, то я и до вашего комента понимал что fork это ветвление которое создаёт точную копию процесса, причём новый процесс имеет свою собственную область памяти, так же я догадывался что :
и так же догадывался что :
так же знал :
знал и то, что можно юзать fork и threads :
|
||||||||
|
|||||||||
| sir_nuf_nuf |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 920 Регистрация: 6.1.2008 Репутация: 14 Всего: 31 |
threads - потребляют меньше памяти. Но технология принципиально нестабильная
forks - потребляют больше памяти, хотя если вы активно ее не меняете ОС все равно попытается ее расшарить (за счет copy - on -write старниц) а еще есть (!) event-driven программирование. Да, это боян, но я еще раз предложу: use POE; use AnyEvent; В этом случае у вас всего один процесс. По грузит ядро процессора по максимуму. Т.е. не ждет ввода-вывода. По хорошему нужно создать несколько процессов по количеству ядер и каждый из них должен работать на POE или AnyEvent. |
|||
|
||||
| nIkTo |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 218 Регистрация: 5.7.2007 Репутация: нет Всего: нет |
POE, что за зверь такой?
где читнуть про него ? |
|||
|
||||
![]()
|
| Правила форума "Perl" | |
|
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Perl: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |