Acabo de ver this section of Unladen Swallow's documentation en Hacker News. Básicamente, son los ingenieros de Google quienes dicen que no son optimistas acerca de eliminar el GIL. Sin embargo, parece que hay una discusión sobre el recolector de basura intercalada con esta charla sobre el GIL. ¿Podría alguien explicarme la relación?¿Qué tiene que ver el GIL de Python con el recolector de basura?
Respuesta
La versión realmente corta es que actualmente python maneja la memoria con un recuento de referencia + una marca & esquema de colector de ciclo de barrido, optimizado para latencia (en lugar de rendimiento).
Esto está bien cuando solo hay un único hilo de mutación, pero en un sistema de subprocesos múltiples, necesita sincronizar todas las veces que modifica los recuentos, o bien puede tener los valores "caídos a través de las grietas", y primitivas de sincronización son bastante caros en hardware contemporáneo.
Si las recolocaciones no se modificaron tan a menudo, esto no sería un problema, pero casi todas las operaciones que se realizan en cpython pueden hacer que un recuento cambie en alguna parte, por lo que las opciones son GIL, haciendo refunciones con algunas tipo de sincronización (y, literalmente, pasar casi todo el tiempo en la sincronización), o abandonar el sistema de refcounting para algún tipo de recolector de basura real.
La respuesta de Tuna-Fish básicamente lo cubre. Si quieres más detalles, hubo una discusión sobre cómo el GIL podría ser eliminado sin tener demasiado mucho de un efecto sobre la referencia contando aquí: http://mail.python.org/pipermail/python-ideas/2009-October/006264.html
La sugerencia en ese enlace era ingenua. Usar compare-and-swap para conteo de referencia es demasiado lento. –
me acaba de encontrar otro punto de vista sobre este tema aquí: http://renesd.blogspot.com/2009/12/python-gil-unladen-swallow-reference.html
- 1. ¿Objective-C tiene un recolector de basura en el iPhone?
- 2. ¿Cómo puedo ver qué recolector de basura java está usando
- 3. Python: sentencia exec y el comportamiento recolector de basura inesperada
- 4. ¿Por qué Ada no tiene un recolector de basura?
- 5. Recolector de basura Node.js
- 6. Python: Comportamiento del recolector de basura
- 7. ¿Qué objetos no limpia el recolector de basura?
- 8. JRuby - ¿Cómo iniciar el recolector de basura?
- 9. ¿El recolector de basura llama a Dispose()?
- 10. v8 | iniciar manualmente el recolector de basura
- 11. ¿Cómo funciona el recolector de basura con las pruebas unitarias?
- 12. ¿Cuánto tiempo está usando el recolector de basura?
- 13. Dado que .NET tiene un recolector de basura ¿por qué necesitamos finalizadores/destructores/disposición de patrón?
- 14. ¿El recolector de basura en serie de Java funciona mucho mejor que otros recolectores de basura?
- 15. VBA Recolector de basura Detalles
- 16. ¿iPhone OS 3.0 tiene un recolector de basura real?
- 17. ¿Cuál es el "recolector de basura mayoritariamente concurrente"?
- 18. ¿El recolector de basura despeja objetos suscritos a eventos?
- 19. ¿Funciona el interno del recolector de basura .NET?
- 20. AS3 - ¿Cuándo se ejecuta el recolector de basura?
- 21. Eficiencia del recolector de basura .NET
- 22. ¿Cómo detengo el recolector de basura de Android? ¿Es posible?
- 23. encuentre qué tipo de recolector de basura se está ejecutando
- 24. Referencias circulares en Javascript/Recolector de basura
- 25. ¿Cuándo se ejecuta el recolector de basura .net?
- 26. Comprobar si el objeto se pueden traer recolector de basura
- 27. Recolector de basura y clase estática, variable
- 28. diferencia entre destructor y recolector de basura
- 29. ¿Hay una JVM que carece de recolector de basura?
- 30. Enlazado de Python y GIL
Bien, lea sobre el GIL. http://wiki.python.org/moin/GlobalInterpreterLock Como puede ver, se trata de la administración de la memoria. –