Ho difficoltà a imparare l'idea dietro Fibers \ coroutines e l'implementazione in Crystal.Crystal converte l'idea che sta dietro il pool di thread in Fibre/spawn
Spero che questo è il posto giusto per chiedere a questa, io assolutamente accettare una risposta "non qui" :)
Questo è il mio solito modo di gestire il multi-threading in 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
In questo modo, apro una nuova discussione, di solito di una connessione in entrata o qualche altra cosa, aggiungo la discussione a una matrice di thread, quindi verifica che non abbia più thread e quindi quello che volevo.
Quale sarebbe un buon modo per implementare qualcosa di simile in Crystal usando spawn \ channels \ fiber ecc.?
Esattamente quello che stavo cercando, grazie! – Ba7a7chy