Tengo dos MVars (bueno, un MVar y un Chan). Necesito sacar cosas del Chan y procesarlas hasta que el otro MVar ya no esté vacío. Mi solución ideal sería algo así como la función UNIX select
donde paso una lista de MVars (presumiblemente vacíos) y los bloques de subprocesos hasta que uno de ellos esté lleno, luego devuelve el MVar completo. Por más que lo intente, no puedo pensar en ninguna forma de hacerlo más allá de interrogar repetidamente cada MVar con isEmptyMVar hasta que obtengo un resultado falso. Esto parece ineficiente.Una forma de formar un 'seleccionar' en MVars sin sondeo
Una idea diferente fue usar throwTo, pero interrumpe lo que está sucediendo en el hilo y tengo que completar el procesamiento de un Chan el atómico.
Una última idea, mientras escribo, es crear una nueva forkIO para cada MVar que intente leer su MVar y luego llenar una MVar recién creada con su propia instancia. El hilo original puede bloquearse en ese MVar. ¿Los hilos Haskell son lo suficientemente baratos como para que funcionen tantos?
Ni siquiera lo pensaría dos veces antes de tener 1k hilos de ejecución. 10k Podría empezar a pensar en medir los gastos generales. 100k, definitivamente. –