На языке программирования Go вы можете отправлять сообщения, используя конструкцию, называемую «Каналы».http://golang.org/doc/effective_go.html#channels
Я хотел бы использовать что-то подобное в Ruby, особенно для IPC.
Псевдокод того, что я хочу:
channel = Channel.new
fork do
3.times{ channel.send("foo ") }
exit!
end
Thread.new do
3.times{ channel.send("bar ") }
end
loop do
print channel.recv
end
# ~> bar foo foo bar bar foo
Есть ли какая-либо конструкция,библиотека или эквивалент для Ruby, который работает подобным образом?
Если нет: каков наилучший способ построения такой абстракции?
ОБНОВЛЕНИЕ: Чтобы уточнить, что мне нужно отэти каналы.
Один вариант использования: некоторые разветвленные рабочие ждут работы.Все они читают из одного и того же JobChannel и сообщают результаты в один и тот же ResultChannel.
Каналы, которые мне нужны
- очень быстрые,
- записи не блокируются, (отправка сообщений)
- reads do block, (получение сообщения)
- не требует специальной обработки перед разветвлением,
- легкий и простой было бы неплохо.
До сих пор я играл с
- DRb, (в отличие от легкого + медленного + слишком большого количества магии для моего маленького мозга)
- Сокетов, (UNIXSocket, TCPSocket ... Сокеты, кажется, имеют много способов их использования. У меня есть полуработающий канал на UNIXSockets. Если вы думаете, что сокеты имеют смысл, на какое подмножество функций я должен смотреть?)
- Трубы. (Соединение более 2-х процессов кажется нетривиальным)
Если какой-либо из них уже был идеальной технологией для моей проблемы, пожалуйста, предоставьте учебники и т. Д., Которые более сфокусированыинформация о моих требованиях.