我正在研究ruby的并行/异步处理功能并阅读大量文章和博文。我通过EventMachine的,纤维,Revactor的,区域环境影响评价,等等,等等看着不幸的是,我没能找到这个非常简单的用例的简单,有效的(和非IO-阻断)解决方案:Ruby并发/异步处理(使用简单用例)
File.open('somelogfile.txt') do |file|
while line = file.gets # (R) Read from IO
line = process_line(line) # (P) Process the line
write_to_db(line) # (W) Write the output to some IO (DB or file)
end
end
是你可以看到,我的小脚本执行三个操作读([R),过程(P)& 写(W¯¯)。让我们假设 - 为了简单 - 每个操作需要的时间正好是1单位(例如10毫秒),因此当前的代码会做这样的事情(5号线):
Time: 123456789(15 units in total)
Operations: RPWRPWRPWRPWRPW
但是,我想它做的事像这样:
Time: 1234567 (7 units in total)
Operations: RRRRR
PPPPP
WWWWW
显然,我可以运行三个过程(读取器,处理器&作家),并通过读出从读取器线到处理器队列,然后通过加工线进入作家队列(经由例如RabbitMQ的所有协调) 。但是,用例非常简单,它感觉不对。
任何有关如何做到这一点的线索(无需从Ruby切换到Erlang,Closure或Scala)?
是否应该按照读取的顺序调用写入? – 2010-10-25 12:41:35
不,这就是他们可以完全异步的整点。 – Dim 2010-10-27 07:58:48