Модераторы: korob2001, ginnie

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> our хешь в потоках. 
:(
    Опции темы
nIkTo
Дата 11.11.2009, 23:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 218
Регистрация: 5.7.2007

Репутация: нет
Всего: нет



Можно ли так сделать :

хешь с данными обьявляем как our
создаём потоки (fork)
из каждого потока работаем с хешем (не изменяем его)

может есть возможность блокировать хешь пока один тред не закончит с ним работу ....

Подскажите, вопрос очень важный.
PM   Вверх
mvsgt
Дата 11.11.2009, 23:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 209
Регистрация: 27.3.2009

Репутация: 1
Всего: 1



fork потоки не создаёт; в виндусовом может создавать - но вообще говоря fork это не потоки а копии процесса со своей версией данных.

http://search.cpan.org/~jdhedden/threads-s...-1.32/shared.pm
PM MAIL   Вверх
nIkTo
Дата 12.11.2009, 00:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 218
Регистрация: 5.7.2007

Репутация: нет
Всего: нет



Соответственно задам избитый (наверное) вопрос: каким способом экономичнее, с точки зрения расходования оперативной памяти, реализовывать многопоточность в Perl.

1. fork
2. use threads;

спасибо.
PM   Вверх
shamber
Дата 12.11.2009, 00:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1422
Регистрация: 5.9.2006
Где: Россия

Репутация: 17
Всего: 18



Цитата(nIkTo @  12.11.2009,  00:01 Найти цитируемый пост)
с точки зрения расходования оперативной памяти

где(ОС)?
PM MAIL Jabber   Вверх
nIkTo
Дата 12.11.2009, 00:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 218
Регистрация: 5.7.2007

Репутация: нет
Всего: нет



*nix like ОС
PM   Вверх
mvsgt
Дата 12.11.2009, 00:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 209
Регистрация: 27.3.2009

Репутация: 1
Всего: 1



Цитата(nIkTo @  12.11.2009,  00:01 Найти цитируемый пост)
Соответственно задам избитый (наверное) вопрос: каким способом экономичнее, с точки зрения расходования оперативной памяти, реализовывать многопоточность в Perl.

1. fork
2. use threads;

спасибо. 


Один хрен много будет. 
PM MAIL   Вверх
nIkTo
Дата 12.11.2009, 01:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 218
Регистрация: 5.7.2007

Репутация: нет
Всего: нет



mvsgt а что посоветуешь, как дешевле всего выполнять параллельно несколько потоков ?
PM   Вверх
mvsgt
Дата 12.11.2009, 01:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 209
Регистрация: 27.3.2009

Репутация: 1
Всего: 1



А о каком вообще количестве потоков речь?
PM MAIL   Вверх
nIkTo
Дата 12.11.2009, 01:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 218
Регистрация: 5.7.2007

Репутация: нет
Всего: нет



50-100

ну это относительно, сейчас машина с 1гб озу, есле будет больше озу то и потоков следовательно надо больше ....

Это сообщение отредактировал(а) nIkTo - 12.11.2009, 01:39
PM   Вверх
mvsgt
Дата 12.11.2009, 01:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 209
Регистрация: 27.3.2009

Репутация: 1
Всего: 1



поток можно оценить в 5 мегабайт. Но надо и процессор учитывать, если много потоков и  они что-то активно делают.

А вот потоки в каком-нибудь curl гораздо легче, на порядки.
PM MAIL   Вверх
nIkTo
Дата 12.11.2009, 02:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 218
Регистрация: 5.7.2007

Репутация: нет
Всего: нет



К примеру запускаю тестовый скрипт :

Код

#!/usr/bin/perl -w
use strict;
use threads ('yield',
             'stack_size' => 1*1024,
             'exit' => 'threads_only',
             'stringify');

for (1..100) {
   my $thread = threads->create(\&main);
}
foreach my $thread (threads->list) {
   $thread->join;
}

sub main {
   print "I am thread : ".threads->tid."\n";
   for (0..1000) {
      sleep(2);
   }
}


Вот что показывает htop :
user posted image

я так понимаю что скрипт расходует (включая все потоки) 3,6% памяти, тоесть ~ 36 Мб, значит ~ 0,36 Мб на поток

Может и дурацкий вопрос, но за что отвечает 'stack_size' ?

Понятно что это размер стека, но вот какой конкретно размер нужен(желателен) ? как его определить ?

Это сообщение отредактировал(а) nIkTo - 12.11.2009, 02:07
PM   Вверх
Bulat
Дата 12.11.2009, 09:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


татарский Нео
***


Профиль
Группа: Завсегдатай
Сообщений: 1701
Регистрация: 22.3.2006
Где: Альметьевск

Репутация: 5
Всего: 57



Цитата(nIkTo @  12.11.2009,  00:01 Найти цитируемый пост)
Соответственно задам избитый (наверное) вопрос: каким способом экономичнее, с точки зрения расходования оперативной памяти, реализовывать многопоточность в Perl.

1. fork
2. use threads;

спасибо. 


fork - если быть предельно корректным - ветвление, а многопоточность это немного иное. И разница в функциональных возможностях у них разная.  И тут все зависит от выбора верного инструмента для решения задачи. А так может и то и другое



--------------------
менеджер по кодеврайтингу  smile 
PM MAIL WWW   Вверх
nIkTo
Дата 12.11.2009, 13:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 218
Регистрация: 5.7.2007

Репутация: нет
Всего: нет



Bulat, можешь на примерах задачь показать, для задачь какого типа стоит использовать fork, а для каких threads ? И по какому критерию надо определять каким "инструментом" работать?
Иначе ваши слова пустой звук не раскрывающий суть вопроса, так как если быть предельно корректным, то я и до вашего комента понимал что fork это ветвление которое создаёт точную копию процесса, причём новый процесс имеет свою собственную область памяти, так же я догадывался что  :
Цитата

многопоточность это немного иное

и так же догадывался что :
Цитата

разница в функциональных возможностях у них разная

так же знал :
Цитата

все зависит от выбора верного инструмента для решения задачи

знал и то, что можно юзать fork и threads :
Цитата

А так может и то и другое

PM   Вверх
sir_nuf_nuf
Дата 12.11.2009, 13:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 920
Регистрация: 6.1.2008

Репутация: 14
Всего: 31



threads - потребляют меньше памяти. Но технология принципиально нестабильная
forks - потребляют больше памяти, хотя если вы активно ее не меняете ОС все равно попытается ее расшарить (за счет copy - on -write старниц)

а еще есть (!) event-driven программирование. Да, это боян, но я еще раз предложу:

use POE;

use AnyEvent;

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


--------------------
user posted image
user posted image
PM MAIL Jabber   Вверх
nIkTo
Дата 12.11.2009, 13:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 218
Регистрация: 5.7.2007

Репутация: нет
Всего: нет



POE, что за зверь такой?
где читнуть про него ?
PM   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Perl"
korob2001
sharq
  • В этом разделе обсуждаются общие вопросы по языку Perl
  • Если ваш вопрос относится к системному программированию, задавайте его здесь
  • Если ваш вопрос относится к CGI программированию, задавайте его здесь
  • Интерпретатор Perl можно скачать здесь ActiveState, O'REILLY, The source for Perl
  • Справочное руководство "Установка perl-модулей", можно скачать здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Perl: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0675 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.