De trabajos anteriores en C# y Java, estoy acostumbrado a una afirmación como esta no ser seguro para subprocesos:¿Los hilos de Ruby no pueden colisionar en una escritura?
x += y;
Sin embargo, no han sido capaces de observar cualquier colisión entre los hilos cuando se ejecuta el código anterior en paralelo con Ruby.
He leído que Ruby automatically prevents multiple threads from writing to the same data concurrently. ¿Es esto cierto? ¿El operador +=
está protegido contra subprocesos en Ruby?
¿Alguna idea de si alguna vez se eliminará el GIL por un hilo en medio de la ejecución de 'x + = y'? ¿O solo se adquiere y se libera en límites de estado? O los límites de nivel superior? – sarnold
Puede encontrar una respuesta detallada a los hilos en general en http://stackoverflow.com/questions/56087/does-ruby-have-real-multithreading. – Chris
@sarnold: El lanzamiento de GVM todo depende del código subyacente de C. Por ejemplo, en la implementación de la multiplicación de 'Bignum', si los números están fuera de un cierto tamaño, se lanzará el GVL para que se ejecute otro código * Ruby * mientras el C multiplica los números. Sin embargo, el GVL solo te preocupa si desarrollas extensiones C. – Linuxios