En el Mundo Real Haskell, Capítulo 28, Software transaccional de la memoria, un concurrente web link checker es desarrollado. Recupera todos los enlaces en una página web y aciertos de cada una de ellas con una HEAD de solicitud de averiguar si el enlace está activo. Un concurrente enfoque que se adopte para la construcción de este programa y se realiza la siguiente instrucción:
No podemos simplemente crear un thread por URL, ya que pueden sobrecargar nuestro CPU o nuestra conexión de red si, como esperamos) la mayoría de los enlaces son en vivo y sensible. En su lugar, utilizamos un número fijo de subprocesos de trabajo, que captura las direcciones Url para descargar de una cola.
Yo no entiendo por qué este grupo de subprocesos que se necesita en lugar de utilizar forkIO
para cada enlace. AFAIK, la Haskell tiempo de ejecución mantiene un grupo de hilos y horarios de manera adecuada de modo que no veo la CPU está sobrecargado. Además, en una discusión acerca de la simultaneidad en el Haskell lista de correo, me encontré con la siguiente declaración que va en la misma dirección:
El paradigma que no tiene ningún sentido en Haskell es subprocesos de trabajo (desde la estrategia en tiempo real hace que para nosotros); en lugar de ir a buscar a un trabajador, sólo forkIO lugar.
Es el conjunto de hilos sólo se requiere para la parte de red o hay una CPU razón para ello?