¿Ruby's Net :: HTTP threadsafe?¿Es Ruby's Net :: HTTP threadsafe?
(Aparte de los métodos version_1_1 y version_1_2 que se dice explícitamente que no lo son)
¿Ruby's Net :: HTTP threadsafe?¿Es Ruby's Net :: HTTP threadsafe?
(Aparte de los métodos version_1_1 y version_1_2 que se dice explícitamente que no lo son)
yo no contaría con ello.
En 2008, matz wrote:
Para resonancia magnética (1.8.x) y YARV (1.9.x), todos los métodos son implementados C protegido por GIL (Global intérprete de bloqueo), de modo que usted don' t tiene que preocuparse por . Pero podría depender de cada implementación.
Net :: HTTP está en stdlib, lo que significa que no está implementado en C (o al menos no está implementado por completo en C). Supongo que la nota de matz sobre el GIL sigue siendo correcta hoy, lo que implicaría que el GIL no se colocaría en Net :: HTTP. Por lo tanto, dudo que sea inseguro.
por desgracia no he encontrado evidencia definitiva de la documentación para la versión actual de Ruby, aunque siento que es también vale la pena mencionar este bit de Concurrency in jruby:
al menos estas clases [clases principales y clases de stdlib] son no considerados como seguros para subprocesos, y si pretende mutarlos al mismo tiempo que otras operaciones, deberá introducir el bloqueo (por ejemplo, con Mutex): cadena, matriz, hash y cualquier estructura de datos derivada de ellos .
Creo que sería mejor ir a lo seguro al agregar bloqueos alrededor de Net :: HTTP o al usar una alternativa segura para la impresión de subprocesos.
Cómo agregar bloqueos @nick – bcackerman
Depende de su caso de uso, probablemente solo deba tratar cada solicitud como atómica. Si necesita ayuda, abra una nueva pregunta o simplemente use otra biblioteca que demuestre ser insegura. –
Suponiendo que no está en MacRuby o JRuby, ¿Importa? El tiempo de ejecución no es realmente multiproceso de todos modos, solo se puede ejecutar un hilo a la vez. – Theo
¿No importa? Entonces, si net: http mantiene algún estado global para su conexión y el tiempo de ejecución cambia entre dos hilos, ¿no saldrá nada? No sé si net: http es threadsafe o no, pero sé que tu respuesta es incorrecta. – bridiver