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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Многоядерность 
:(
    Опции темы
frenkys
Дата 25.3.2008, 02:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Вот интересует такой вопрос:

сейчас уже везде почти много-ядерные процессоры.
Пишут ли под веб на перле именно с поддержкой много-ядерности, или уж сама технология веба это подразумевает?
Или же это должно быть реализовано на уровне компилятора?
Например fastcgi - они ж не отточены под многоядерные процессоры.
--------------------
 niva[frenky]
PM MAIL WWW   Вверх
GoDleSS
Дата 25.3.2008, 09:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Веб-скрипты нет смысла писать многопоточными/многопроцессовыми, т.к. у любого нормальном динамическом сайте:
1. Много пользователей. И даже если мы говорим о мод_перл или фаст сиджиай - 
2. Много скриптов. Ну и на последок, если мы говорим о мод_перл + системой с единным сценарием:
3. Перл взаимодействует с несколькими сервисами/демонами - СуБД, мейл демон и т.д.


--------------------
It's a nice day to die my friend!
PM MAIL WWW ICQ   Вверх
sir_nuf_nuf
Дата 25.3.2008, 13:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



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

Например Apache - всегда запущено несколько процессов, 
Apache2 поддерживает многопоточность, поэтому один скрипт может работать параллельно.

потоки и процессы операционка раскидывает по процессорам.

вывод: не парься! =)
P.S. если только сам не задумал веб-сервер писать



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


Бывалый
*


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

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



Просто тогда чтобы писать быстрые приложения под веб 
например Java те же JSP  будет быстрее за счет многоядерного процессора, ведь даже уже при соединении с мускулем, а оно там всего идет один раз а не кучу висящих коннектов к бд (фастцги).

Неужели придеться смотреть в сторону явы?
--------------------
 niva[frenky]
PM MAIL WWW   Вверх
sir_nuf_nuf
Дата 25.3.2008, 19:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Ты не понял:
многопоточность и многопроцессорность УЖЕ поддерживаются!
На уровне apache + OS.
тебе при написании скриптов даже думать об этом не прийдется, твои скрипты и так будут использовать все ядра (если конечно apache + OS нормально настроены)

Другое дело, что java действительно несколько быстрее чем perl. 
Именно платформа - т.е. JVM работает чуток эффективней perl,
Но это не повод переходить на java.
Как показывает опыт тормоза в 90 % случаях - из-за алгоритмов, а не из-за
используемого языка.

По поводу соединений с DB.. 
Да в web серверах написанных на java это сделано немного прозрачнее,
но и в perl не все так плохо - есть Apache::DBI и Apache::DBI::Cache, 
которые делают приблизительно тоже самое.

Мне кажется, они не умеют разделять подключения между потоками, что конечно плохо.. 
число подключений будет равно числу потоков. В j2ee подключений меньше. 

собираюсь обсудить эту тему на форуме сейчас =)



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


Опытный
**


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

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



sir_nuf_nuf
По поводу соединений с DB.. ... Мне кажется, они не умеют разделять подключения между потоками, что конечно плохо.. 
число подключений будет равно числу потоков


подключение к базе -- это очень затратное удовольствие, поэтому
всё делается гораздо проще -- при первом выполнении скрипта делается подключение и dbh пишется в shared memory, все остальные копии скриптов считывают этот dbh и работаю через него

если есть какой-то запрос, которые выполняется очень часто, то он делается параметризированным, т.е. dbh->prepare("запрос с параметрами;"), благодаря чему база парсит его только 1 раз, а потом только постоянно выпоняет с разными условиями, а в дальнейшем вызывается только execute("$param1, $param2, ...");

ЗЫ для mysql prepare() & Co давно есть, для постгреса написаны недавно, если в Вашем дистрибутиве этого еще нет, советую обновить DBD-Pg, в нем было очень много доработок
PM MAIL Jabber   Вверх
sir_nuf_nuf
Дата 26.3.2008, 00:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(vadiml @ 25.3.2008,  20:46)
sir_nuf_nuf
По поводу соединений с DB.. ... Мне кажется, они не умеют разделять подключения между потоками, что конечно плохо.. 
число подключений будет равно числу потоков


подключение к базе -- это очень затратное удовольствие, поэтому
всё делается гораздо проще -- при первом выполнении скрипта делается подключение и dbh пишется в shared memory, все остальные копии скриптов считывают этот dbh и работаю через него

если есть какой-то запрос, которые выполняется очень часто, то он делается параметризированным, т.е. dbh->prepare("запрос с параметрами;"), благодаря чему база парсит его только 1 раз, а потом только постоянно выпоняет с разными условиями, а в дальнейшем вызывается только execute("$param1, $param2, ...");

ЗЫ для mysql prepare() & Co давно есть, для постгреса написаны недавно, если в Вашем дистрибутиве этого еще нет, советую обновить DBD-Pg, в нем было очень много доработок

я в курсе как это прибризительно работает. меня интересуют детали.

как то - что такое "shared memory"  ?

Это POSIX shared memory ?
или это просто аресное простанство процесса, которое по умолчанию разделено междк потоками ?
или это разделяемая память на уровне perl ? в котором вообще говоря память (perlовая) не разделяется между потоками .
или это особенность mod_perl ?


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


Эксперт
***


Профиль
Группа: Комодератор
Сообщений: 1287
Регистрация: 6.1.2008
Где: Москва

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



vadiml, есть еще один вопрос: как потоки используя одно соединение с базой будут использовать транзакции?


--------------------
Написать код, понятный компьютеру, может каждый, но только хорошие программисты пишут код, понятный людям. (Мартин Фаулер. Рефакторинг)
PM MAIL Skype Jabber   Вверх
vadiml
Дата 26.3.2008, 20:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



sir_nuf_nuf
что такое "shared memory"  ? Это POSIX shared memory ?
это я по привычке с С  назвал, вот:
"memcached is a high-performance, distributed memory object caching system, generic in nature, but intended for use in speeding up dynamic web applications by alleviating database load" http://www.danga.com/memcached/
думаю в http://search.cpan.org/~bradfitz/Cache-Mem...he/Memcached.pm написано достаточно 
и ссылки есть
так же есть есть куча подмодулей, но я их не смотрел -- не понадобились
ЗЫ я вообще редко для web'а пишу, 

ginnie
как потоки используя одно соединение с базой будут использовать транзакции?
как все базы -- каждая транзакция живёт сама по себе, если возник конфлик по записи данных -- ждёт освобождения, если возникла взаимная блокировка транзакций -- откат одной из них по таймауту.
если, конечно, Вы firebird не используете, в котором уже несколько лет обещают многопоточноть, а воз и ныне там smile

PM MAIL Jabber   Вверх
Ramirez
Дата 31.3.2008, 11:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 305
Регистрация: 18.1.2005
Где: Moscow, ExUSSR

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



это фича mod_perl и апача. пул коннектов к бд или чего угодно можно реализовать, на базе apache + mod_perl
вот тут у меня была похожая задача: http://forum.vingrad.ru/topic-166437.html только мне нужен был пул конектов к телнету, но чтобы общий на всех воркеров апача.

советую глянуть доки на модперл и директивы PerlRequire в апаче. Суть в общих чертах том, что у апача всегда есть мастер-процесс, который сам запросы не обрабатывает а только управляет пулом воркеров, так вот свой код можно инициализировать в этом процессе. Но при этом все потомки имеют доступ к этм данным. самый натуральный shared memory получается....

но почему это так работает, мне никто объяснить не смог =)

Это сообщение отредактировал(а) Ramirez - 31.3.2008, 11:52
PM ICQ   Вверх
ginnie
Дата 31.3.2008, 11:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Комодератор
Сообщений: 1287
Регистрация: 6.1.2008
Где: Москва

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



Уважаемый vadiml, проблема в том, что в одном соединении может осуществляться только одна транзакция, соответственно, потоки не могут использовать одновременно одно соединение, если они явно используют транзакции.


--------------------
Написать код, понятный компьютеру, может каждый, но только хорошие программисты пишут код, понятный людям. (Мартин Фаулер. Рефакторинг)
PM MAIL Skype Jabber   Вверх
frenkys
Дата 19.10.2009, 01:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Поскольку больше люблю fastcgi а не mod_perl то приходиться выкручиваться по другому.


Ребята а действительно, кто-то пробывал $dbh хранить в мемкеше и разными скриптами оттуда его брать, при условии что коннект живой?

Добавлено через 57 секунд
Цитата(vadiml @  25.3.2008,  20:46 Найти цитируемый пост)
если есть какой-то запрос, которые выполняется очень часто, то он делается параметризированным, т.е. dbh->prepare("запрос с параметрами;"), благодаря чему база парсит его только 1 раз, а потом только постоянно выпоняет с разными условиями, а в дальнейшем вызывается только execute("$param1, $param2, ...");



это нужно вызывать prepare_cached
--------------------
 niva[frenky]
PM MAIL WWW   Вверх
KSURi
Дата 19.10.2009, 11:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(frenkys @  19.10.2009,  01:38 Найти цитируемый пост)
Ребята а действительно, кто-то пробывал $dbh хранить в мемкеше и разными скриптами оттуда его брать, при условии что коннект живой?

Это невозможно, т.к. DBI реализован с помощью XS. См. тут.


--------------------
Died at Life.pl line 21
PM Jabber   Вверх
frenkys
Дата 19.10.2009, 13:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



и на чем вы остановились в итоге?
--------------------
 niva[frenky]
PM MAIL WWW   Вверх
sir_nuf_nuf
Дата 19.10.2009, 15:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



на чем мы остановились с чем ?
как использовать соединения с базой?

У нас так - каждый скрипт работает в своем процессе (не в потоке).
Каждый процесс держит постоянно соединение с базой данных.

В случае с потоками - обычно создают пул соединений.
Каждый поток при необходимости берет соединение из пула, а когда будет не нужно - возвращает.


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


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

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


 




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


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

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