gpt4 book ai didi

ruby 线程 block ?

转载 作者:数据小太阳 更新时间:2023-10-29 08:52:47 25 4
gpt4 key购买 nike

我在某处读到 ruby 线程/纤维即使在 1.9 中也会阻塞 IO。这是真的吗?它的真正含义是什么?如果我在多个线程上执行一些 net/http 操作,是否只有 1 个线程在给定时间运行该请求?

谢谢

最佳答案

假设您正在使用 CRuby,一次只会运行一个线程。但是,请求将并行进行,因为每个线程在其 IO 未完成时将被阻塞在其 IO 上。所以如果你这样做:

require 'open-uri'
threads = 10.times.map do
Thread.new do
open('http://example.com').read.length
end
end

threads.map &:join
puts threads.map &:value

这比按顺序执行要快得多。

此外,您还可以检查线程是否已完成,而不会在其完成时阻塞。

例如:

require 'open-uri'
thread = Thread.new do
sleep 10
open('http://example.com').read.length
end
puts 'still running' until thread.join(5)
puts thread.value

使用 CRuby,线程不能同时运行,但它们仍然有用。其他一些实现,如 JRuby,具有真正的线程并且可以并行运行多个线程。

一些好的引用:

关于 ruby 线程 block ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8772721/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com