Темы или дрб? - PullRequest
       33

Темы или дрб?

0 голосов
/ 28 августа 2009

Мне нужно иметь 2 (или, может быть, 3) непрерывно работающих «грани» программы в Ruby - поток связи, поток рендеринга и, возможно, поток кеширования.

Идея состоит в том, что поток рендеринга показывает слайд-шоу (определение которого читается из файла), и все слайды извлекаются из удаленного HTTP-сервера потоком связи. Рендеринг должен быть непрерывным и без остановок (отсюда и вероятная необходимость кеширования). Файл может изменяться в течение срока действия программы и поэтому требует повторного анализа (на лету).

Я хотел бы отправлять сообщения между «гранями», например, когда поток сообщений получает целую «главу» шоу, поток рендеринга может начинаться, прежде чем ждать загрузки всего шоу, например, и т. Д. .

Должен ли я использовать потоки Ruby или DRb? Как я могу передавать сообщения между потоками?

Спасибо за любые отзывы!

1 Ответ

2 голосов
/ 28 августа 2009

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

Тогда непременно взгляните на решения, которые предлагают другие возможности. Помимо DRb, вам также следует обратить внимание на EventMachine (для асинхронных возможностей, которые могут вам понадобиться при чтении глав) и RabbitMQ для более общей и более слабой связи, которую предлагает система обмена сообщениями.

Начните с малого и не пытайтесь двигаться слишком быстро. Для тех, у кого есть проблемы с потоками Ruby, я использую небольшой отчет для рендеринга, прослушивающий очередь RabbitMQ. Клиент использует четыре потока для рендеринга графиков (google), отправки предупреждений и автоматического сброса различных очередей (после нескольких часов сбора данных). Все отлично работает!

Chris

...