我很难学习 Fibers\coroutines 背后的想法以及 Crystal 中的实现。
我希望这是问这个问题的正确地方,我会完全接受“不在这里”的答案:)
这是我在 Ruby 中处理多线程的常用方法:
threads = []
max_threads = 10
loop do
begin
threads << Thread.new do
helper_method(1,2,3,4)
end
rescue Exception => e
puts "Error Starting thread"
end
begin
threads = threads.select { |t| t.alive? ? true : (t.join; false) }
while threads.size >= max_threads
puts 'Got Maximum threads'
sleep 1
threads = threads.select { |t| t.alive? ? true : (t.join; false) }
end
rescue Exception => e
puts e
end
end
这样我打开一个新线程,通常是传入连接或其他东西,将线程添加到线程数组,然后检查我没有比我想要的更多的线程。
使用 spawn\channels\fibers 等在 Crystal 中实现类似功能的好方法是什么?