На языке программирования Движения можно отправить сообщения вокруг использования конструкции под названием "Каналы". 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.
Каналы мне нужно
До сих пор я играл вокруг с
Если какой-либо из тех уже был идеальной технологией для моей проблемы, предоставьте учебные руководства и т.д., которые больше сфокусировали информацию о моих требованиях.
Идея Go о передаче сообщений по каналам как первоклассной конструкции действительно имеет смысл только при наличии параллелизма (горутины, тасклеты, как бы вы их ни называли). Благодаря дешевому параллелизму блокировка тасклета или сопрограммы больше не проблема, а блокировка передачи сообщений приобретает гораздо больший смысл.
Если бы это был Python, я бы указал вам на Stackless ; в Ruby, возможно, вам подойдет Revactor или NeverBlock ?
посмотрите этот вопрос: shared-variable-among-ruby-processes
а также посмотрите drb
Надеюсь, это немного поможет.