[Moscow.pm] perl cross-thead db con pool

Ruslan Zakirov ruz на bestpractical.com
Пн Фев 11 04:04:08 PST 2013


2013/2/8 Daniel Podolsky <onokonem на gmail.com>:
>> Вы пример по принципу моего сделайте, который может запустить любой и
>> вам помогут, а не отправляйте людей к модулю на CPAN.
> Вы ничего не знаете про перловые треды, я правильно понял?

Мало.

>> Знаю, что все копии dbh используют один файловый дескриптор,
>> а как сервер и клиент различает запросы и ответы - не знаю.
> А я знаю, что он их не различает. И "все работает" - это просто
> следствие некорректности эксперимента.
>
> Вообще - я не против и дальше обсуждать это все с Вами, но давайте сменим тон.
>
> Проблема - моя - состоит в том, что "Shared variables can only store
> scalars, refs of shared variables, or refs of shared data"
> (http://perldoc.perl.org/threads/shared.html).
>
> К сообществу я обращаюсь за идеями - как обойти это ограничение и
> сделать таки межтредный пул.

Сложно, но судя по доке можно. В DBI написано [1] про thread safety. В
доке к mysql [2] написаны условия для thread safety. Осталось дело за
"малым" пропатчить DBD::mysql:

1) линковку *_r либой
2) CLONE методы для правильного клонирования perl структур и
инициализации новых тредов
3) подчистка после тредов
4) мутекс вокруг запросов
5) все это в теории - я так мало знаю о thread программировании

[1] http://search.cpan.org/~timb/DBI-1.623/DBI.pm#Threads_and_Thread_Safety
[2] http://dev.mysql.com/doc/refman/5.0/en/threaded-clients.html

> Да, я придумал схему с дополнительными тредами и передачей им
> информации в скалярах. Но мне не очевидно, что реализовать ее будет
> проще, чем переписать прототип на питоне.
>
> Пока я прототипирую на перле (потому, что я уже 10 лет так делаю, и
> все не соберусь уйти на python, или на groovy), но закончить прототип
> я могу и в single thread mode. Только немного напрягает, что
> приходится держать в голове воображаемую многотредность.
>
> Спасибо за внимание.
> --
> Moscow.pm mailing list
> moscow-pm на pm.org | http://moscow.pm.org



-- 
Best regards, Ruslan.


Подробная информация о списке рассылки Moscow-pm