[Ruby] межпроцесснаясинхронизация данных.

vic ismakaev viclists at mail.esoo.ru
Mon May 12 10:10:09 MSD 2003


8 Май 2003 17:27, Eugene Scripnik написал:
> vic ismakaev wrote:
> >>>Через потоки и Mutex - да,можно.
> >>>Но я не хочу делать сервер многопоточным. Может быть потом,когда буду
> >>>писать его с нуля.
> >>>А сейчас хотелось бы просто добавить к той реализации сервера,который у
> >>>меня есть добавить что-нибудь типа shared-memory или персистент объект.
> >>
> >>тогда разделяемая память с семафорами
> >>смотри в сторону ruby-sysvipc:
> >>http://raa.ruby-lang.org/list.rhtml?name=sysvipc
> >>Там можно устраивать несколько видов межпроцессного взаимодействия.
> >>Насколько я помню в библиотеке есть примеры.
> >
> > Как раз сейчас смотрю на нее .Только ее статус смущает - 0.0.3
> > expiremental.
>
> Я ее активно использовал около года назад, это всего-лишь интерфейс к
> системным вызовам. Просто его давно никто не обновлял. Нареканий не было.
Понятно.Попробую тогда и я.По крайней мере под 1.7.3 скомпилировался 
нормально.
> > А в принципе мою задачу можно решить не прибегая к третим либам,тредам
> > или файлам.?
>
> Могу еще предложить трехуровневую организацию:
> Клиент1---\     /--- prefork server1 ---\
> Клиент2----> - <---- prefork server2 ---->  Хранилище-сервер
> ...       /     \    ...                 /
> КлиентN__/       \__ prefork serverM ___/
>
> В качестве хранилища можешь использовать DRb сервер, который будет
> раздавать shared ресурс. Треды он тебе обеспечит, Mutex допишешь к
> ресурсам сам.
Вот про drb как-то не думал в таком ключе. Надо посмотреть попристальнее.
А как у него со скоростью?
> Если не хочешь возится с Mutex можешь вообще в качестве хранилища
> использовать RDBMS. PostgreSQL поддерживает транзакции, он и обеспечит
> изоляцию одновременного доступа.
Увы.Но я специально отказался от ДБ/файлов из-за производительности.
> Вариантов много, все зависит от желания :)


-- 
С уважением
Виктор В Исмакаев



More information about the Ruby mailing list