gpt4 book ai didi

ruby - 在线程不起作用的情况下提高 ruby​​ 代码性能

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

我正在尝试使用 Thread 优化这段 ruby​​ 代码,它涉及相当多的 IO 和网络事件。不幸的是,情况并不太好。

# each host is somewhere in the local network
hosts.each { |host|
# reach out to every host with something for it to do
# wait for host to complete the work and get back
}

我最初的计划是将循环的内部包装到每次迭代的新线程中。像这样的东西:

# each host is somewhere in the local network
hosts.each { |host|
Thread.new {
# reach out to every host with something for it to do
# wait for host to complete the work and get back
}
}

# join all threads here before main ends

我希望,由于即使没有 ruby​​ 1.9,这个 I/O 也会受到限制,我应该能够获得一些东西,但没有,没有。有什么想法可以改进吗?

最佳答案

我不确定您有多少台主机,但如果数量很多,您可能想尝试使用固定线程数的生产者/消费者模型:

require 'thread'

THREADS_COUNT = (ARGV[0] || 4).to_i

$q = Queue.new
hosts.each { |h| $q << h }

threads = (1..THREADS_COUNT).map {
Thread.new {
begin
loop {
host = $q.shift(true)

# do something with host
}
rescue ThreadError
# queue is empty, pass
end
}
}

threads.each(&:join)

如果这太复杂了,您可以尝试使用 xargs -P . ;)

关于ruby - 在线程不起作用的情况下提高 ruby​​ 代码性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7142177/

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