Come ho capito, Ruby 1.9 utilizza i thread del sistema operativo ma solo un thread verrà comunque eseguito contemporaneamente (anche se un thread potrebbe eseguire il blocco dell'IO mentre un altro thread sta elaborando). Gli esempi di threading che ho visto usano solo Thread.new
per avviare un nuovo thread. Provenendo da uno sfondo Java, in genere utilizzo i pool di thread per non avviarli a molti nuovi thread poiché sono "pesanti".Ruby 1.9 pool di thread
Esiste un modello di pool di thread incorporato in ruby? Non ne ho visto uno nelle librerie di lingue predefinite. Oppure esiste una gemma standard che viene in genere utilizzata? Dal momento che il threading a livello di sistema operativo è una funzionalità più recente di Ruby, non so quanto siano mature le librerie per questo.
Grazie. In realtà non ho un caso d'uso in questo momento, ma mentre stavo leggendo il libro piccone, questo era qualcosa di cui non ero sicuro, ma tu hai chiarito. –
Non capisco mentre la gente dice che i thread sono inutili in Ruby perché non vengono eseguiti contemporaneamente. Sono davvero inutili per le attività legate alla CPU, ma possono essere molto utili per qualsiasi IO di blocco che si desidera eseguire in parallelo. Per esempio. richieste HTTP simultanee. – Kamchatka
Grazie per il commento. Devo chiarire ulteriormente che i thread non sono inutili in Ruby, solo che le persone devono essere consapevoli della limitazione del GIL poiché i thread non sono privi di overhead. Per l'I/O non bloccante, una chiamata asincrona basata su evento C può essere più appropriata. Vedi http://blog.gregweber.info/posts/2011-06-16-high-performance-rb-part3 per ulteriori informazioni. – Wulfram