2010-06-17 19 views
10

Ruby's Net :: HTTP threadsafe?Ruby's Net :: HTTP threadsafe?

(A parte i metodi version_1_1 e version_1_2 che si dice in modo esplicito non sono)

+1

Supponendo che tu non sia su MacRuby o JRuby, è importante? Il runtime non è comunque realmente multithread, può essere eseguito solo un thread alla volta. – Theo

+0

Non importa? Quindi, se net: http mantiene uno stato globale per la tua connessione e il runtime commuta avanti e indietro tra due thread, nulla andrà storto? Non so se net: http è thread-safe o no, ma so che la tua risposta è sbagliata. – bridiver

risposta

2

non vorrei contare su di esso.

Nel 2008, matz wrote:

per la risonanza magnetica (1.8.x) e YARV (1.9.x), ogni C implementato metodi sono protetto da GIL (Global Interpreter Lock), in modo che don' t necessario per preoccuparsi. Ma potrebbe dipendere da ogni implementazione.

Net: HTTP è in stdlib, il che significa che non è implementato in C (o almeno non completamente implementato in C). Presumo che la nota di matz su GIL sia ancora corretta oggi, il che implicherebbe che GIL non venga inserito su Net :: HTTP. Pertanto, dubito che sarebbe infallibile.

non ho purtroppo trovato la prova definitiva nella documentazione per la versione corrente di Ruby, anche se mi sento che è anche la pena menzionare questo bit da Concurrency in jruby:

Almeno queste classi [classi principali e classi in lo stdlib] è non considerato thread-safe, e se si intende mutarlo contemporaneamente ad altre operazioni si vorrà introdurre il blocco (ad es. con Mutex): String, Array, Hash e qualsiasi struttura dati derivata da loro .

sento che sarebbe meglio andare sul sicuro da entrambe le serrature aggiungendo intorno Net :: HTTP o utilizzando un threadsafe alternativa.

+0

Come aggiungeresti i blocchi @nick – bcackerman

+0

Dipende dal tuo caso d'uso, probabilmente dovrai trattare ogni richiesta come atomica. Se hai bisogno di aiuto, apri una nuova domanda o usa semplicemente un'altra libreria che ha dimostrato di essere protetta dai rischi. –

Problemi correlati