Necesito armar un sistema concurrente con un Control.Concurrent.Chan
compartido entre subprocesos. Solo habrá un consumidor y muchos productores. Al mirar Chan
documentation no vi ninguna advertencia sobre la cantidad de consumidores y productores que pueden funcionar en el mismo canal, y el código fuente parece estar utilizando los accesos "seguros" predeterminados para MVar
s, por lo tanto, creo que debería ser seguro suponer que no debería haber limitaciones, pero no estoy seguro. Entonces, mi pregunta es ... ¿sabes si los canales haskell son seguros (en general) para múltiples lectores y productores, por favor?¿Los canales de Haskell `Control.Concurrent.Chan` son seguros para múltiples lectores/productores?
Q
¿Los canales de Haskell `Control.Concurrent.Chan` son seguros para múltiples lectores/productores?
9
A
Respuesta
11
Son seguros para cualquier cantidad de hilos. Son una simple lista vinculada basada en MVar. Las compensaciones de diseño permiten dupChan, que ayudan en el caso opuesto de transmisión a múltiples lectores.
El Chan es tan simple que no cuenta el número de elementos que contiene, ni tiene un límite superior. Entonces, si los productores superan al consumidor, entonces el Chan será muy grande. Si esto es un problema, puede emparejar el Chan con un (MVar Int). y hacer que los productores y consumidores modifiquen el total acumulado de elementos en el Chan.
Cuestiones relacionadas
- 1. Mezcla de canales seguros y no seguros
- 2. ¿Son seguros los subprocesos urllib2 y httplib?
- 3. ¿Por qué los EJB son seguros y los servlets no?
- 4. ¿Los delegados de C# son seguros para subprocesos?
- 5. ¿Los métodos de IEnumerable Linq son seguros para subprocesos?
- 6. ¿Los contenedores integrados de Python son seguros para subprocesos?
- 7. ¿Cuán seguros son los CDN para entregar jQuery?
- 8. ¿Por qué los servlets no son seguros para subprocesos?
- 9. ¿Por qué los objetos inmutables son seguros para subprocesos?
- 10. ¿Estos hilos son seguros?
- 11. ¿Los comentarios son 100% seguros en todos los entornos principales?
- 12. ¿Los pasos de inserción y eliminación de LinkedBlockingQueue son seguros?
- 13. ¿Los miembros privados son realmente más "seguros" en Java?
- 14. ¿Qué tan seguros son los recursos en .NET?
- 15. ¿Todos los funtores de Haskell son endofunctores?
- 16. ¿La primavera TransactionTemplate y SimpleJdbcTemplate son seguros para subprocesos?
- 17. ¿Los métodos estáticos en las clases de código subyacente de ASP.NET no son seguros para subprocesos?
- 18. ¿Cuáles de los algoritmos hash incluidos .NET son lo suficientemente seguros para el hashing de contraseñas?
- 19. ¿Los patrones aritméticos son legales Haskell?
- 20. ¿Los GUID generados en Windows 2003 son seguros para usar como ID de sesión?
- 21. ¿Los tipos de datos primitivos son seguros para subprocesos en Java
- 22. ¿Los flujos de salida estándar en C++ son seguros para subprocesos (cout, cerr, clog)?
- 23. ¿Los ID (ObjectIds from mongo) son seguros para usar en una URL?
- 24. ¿Están seguros los clientes de JAX-WS?
- 25. ¿Qué caracteres no son seguros en las cadenas de consulta?
- 26. Funcionamiento único del canal WCF frente a canales múltiples
- 27. Múltiples canales en un solo RSS xml: ¿es apropiado?
- 28. ¿Los destructores deben ser seguros para la fabricación de hilos?
- 29. ¿Los controladores de eventos no están seguros?
- 30. ¿Qué son exactamente la firma de Delay y los nombres seguros en .net?
Bien, gracias. La ausencia de un límite superior no es un problema en mi caso, porque cada hilo enviará un solo mensaje una vez completado. Es una estructura simple que voy a usar para que el hilo principal espere N mensajes (si N es el número de hilos) del canal antes de continuar. –
Una barrera contada como esta se ve como un semáforo en cantidad, puede reemplazar la longitud de la lista enlazada del Chan con MSem o MSemN en http://hackage.haskell.org/package/SafeSemaphore usando una cantidad inicial de (1-N). –
No sabía sobre semáforos en la plataforma de haskell, muchas gracias por señalarlo. Reemplazaré los canales con ellos de seguro. –