目标是在不阻塞代码的情况下执行异步任务(文件读取,网络操作)。我们有多个这样的异步任务需要以固定的时间间隔执行。这是一个伪代码来演示相同的内容。
# the async tasks should be performed in parallel
# provide me with a return value after the task is complete, or they can have a callback or any other mechanism of communication
async_task_1 = perform_async(1)
# now I need to wait fix amount of time before the async task 2
sleep(5)
# this also similar to the tasks one in nature
async_task_2 = perform_async(2)
# finally do something with the result
我正在读红宝石,我有2种选择分叉,穿线。这也称为Fiber。我还读到由于基本Ruby中的GIL,我将无法充分利用线程。我仍然想坚持基础Ruby。
我之前在OMP和Cuda中编写了一些并行代码。但我从来没有机会在Ruby中做到这一点。
你能建议如何实现这个目标吗?
答案 0 :(得分:2)
我会向你推荐concurrent-ruby
宝石及其async feature。只要您的任务受IO限制,这将非常有用。 (正如你所说的那样)
您有执行任务的异步功能。要等待两次异步调用之间的时间间隔,您可以使用sleep函数
class AsyncCalls
include Concurrent::Asnyc
def perform_task(params)
# IO bound task
end
end
AsyncCalls.new.async.perform_task("param")
sleep 5
AsyncCalls.new.async.perform_task("other param")