线程还是多进程?

3

运行多个Ruby脚本实例还是在单个脚本中运行多个线程更有效?

例如,考虑一个用于检查给定域名的所有链接是否正常工作的Ruby脚本。

您会运行此脚本的多个实例还是多个线程?

如何创建多个线程?


参见:https://stackoverflow.com/questions/29114290/do-threads-in-ruby-improve-concurrency - Ian Ringrose
1个回答

3
"Efficiency" 可能有很多意思。对于 Ruby < 1.9,绿色线程 意味着您无法从线程中获得像您想象的那样多的并发性,因此使用多个脚本实例将是最好的方法来最小化从开始到结束的总实际时间。
至于创建它们,这里是 Pickaxe 书籍 下载页面“并行”的示例:
require 'net/http'


pages = %w( www.rubycentral.com
            www.awl.com
            www.pragmaticprogrammer.com
           )


threads = []


for page in pages
  threads << Thread.new(page) { |myPage|


    h = Net::HTTP.new(myPage, 80)
    puts "Fetching: #{myPage}"
    resp, data = h.get('/', nil )
    puts "Got #{myPage}:  #{resp.message}"
  }
end


threads.each { |aThread|  aThread.join }

它会等待线程完成,这样(a)您可以安全地使用结果,(b)如果您有线程正在执行重要任务,则不希望退出。(它们在内核#退出时消失。) - DigitalRoss
即使在YARV 1.9中使用本地线程,您仍然会受到全局解释器锁的限制,这意味着您只能获得并发性,而没有并行性。另一种替代线程和手动分离进程的方法是使用fork,如果您的系统支持的话。 - Dominik Honnef

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接