Gav*_*ler 5 ruby multithreading
我正在编写一个 ruby 程序,它将使用线程来做一些工作。正在完成的工作需要不确定的时间才能完成,可能需要 5 到 45 秒以上的时间。下面是线程代码的粗略示例:
loop do # Program loop
items = get_items
threads = []
for item in items
threads << Thread.new(item) do |i|
# do work on i
end
threads.each { |t| t.join } # What happens if this isn't there?
end
end
Run Code Online (Sandbox Code Playgroud)
我的偏好是跳过加入线程而不是阻塞整个应用程序。但是我不知道这有什么长期影响,特别是因为代码几乎立即再次运行。这是安全的做法吗?或者有没有更好的方法来生成一个线程,让它工作,并在它完成时清理,所有这些都在一个无限循环中?
写出问题后,我意识到这正是网络服务器在提供页面时所做的事情。我用 google 搜索并找到了以下有关Ruby Web 服务器的文章。循环代码看起来非常像我的:
loop do
session = server.accept
request = session.gets
# log stuff
Thread.start(session, request) do |session, request|
HttpServer.new(session, request, basePath).serve()
end
end
Run Code Online (Sandbox Code Playgroud)
Thread.start 实际上与 相同,Thread.new因此看起来让线程完成并消失是可以的。
| 归档时间: |
|
| 查看次数: |
2475 次 |
| 最近记录: |