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

Eugene Scripnik Eugene.Scripnik at itgrp.net
Thu May 8 15:27:44 MSD 2003


vic ismakaev wrote:

>>>Через потоки и Mutex - да,можно.
>>>Но я не хочу делать сервер многопоточным. Может быть потом,когда буду
>>>писать его с нуля.
>>>А сейчас хотелось бы просто добавить к той реализации сервера,который у
>>>меня есть добавить что-нибудь типа shared-memory или персистент объект.
>>
>>тогда разделяемая память с семафорами
>>смотри в сторону ruby-sysvipc:
>>http://raa.ruby-lang.org/list.rhtml?name=sysvipc
>>Там можно устраивать несколько видов межпроцессного взаимодействия.
>>Насколько я помню в библиотеке есть примеры.
> 
> Как раз сейчас смотрю на нее .Только ее статус смущает - 0.0.3 expiremental.
Я ее активно использовал около года назад, это всего-лишь интерфейс к 
системным вызовам. Просто его давно никто не обновлял. Нареканий не было.
> 
> А в принципе мою задачу можно решить не прибегая к третим либам,тредам или 
> файлам.?
Могу еще предложить трехуровневую организацию:
Клиент1---\     /--- prefork server1 ---\
Клиент2----> - <---- prefork server2 ---->  Хранилище-сервер
...       /     \    ...                 /
КлиентN__/       \__ prefork serverM ___/

В качестве хранилища можешь использовать DRb сервер, который будет 
раздавать shared ресурс. Треды он тебе обеспечит, Mutex допишешь к 
ресурсам сам.

Если не хочешь возится с Mutex можешь вообще в качестве хранилища 
использовать RDBMS. PostgreSQL поддерживает транзакции, он и обеспечит 
изоляцию одновременного доступа.

Вариантов много, все зависит от желания :)

-- 
Eugene Scripnik
IT Group
Software Architect
Tel./Fax +380 (372) 58-43-10
email: Eugene.Scripnik at itgrp.net
http://www.itgrp.net/




More information about the Ruby mailing list