Haskell concurrencia sobre kqueue
-
26-09-2019 - |
Pregunta
escribí aplicación concurrente y he cogido el error:
buildFdSets: archivo descriptor de fuera de rango
descubrí que es el límite de sistema operativo en el número de descriptores de archivos en un solo proceso, en mi FreeBSD es 1024
. Es el límite de select()
. También he aprendido que no es otro enfoque: kqueue()
.
Mis preguntas son:
- ¿Cómo ganar límite de descriptores de archivos?
- ¿Cómo utilizar
kqueue()
en lugar deselect()
en los programas de Haskell?
Solución
Creo que GHC 7 tiene ahora soporte para el uso kqueue () en su extremo posterior:
enlace al documento , blog descriptiva
Sin embargo, la Plataforma Haskell aún no está fuera para GHC 7.
Otros consejos
Usted puede simplemente actualizar a GHC 7, que es parte de la Plataforma Haskell, que incluye :
Plataformas En POSIX, hay un nuevo gestor de I / O basado en epoll / kqueue / encuesta, que permite que el código I multiproceso / S a escala a un número mucho más grande (100k +) de hilos
En particular:
Arquitectónicamente, el nuevo gestor de E / S consta de dos componentes. Nuestra biblioteca fi cación caso noti proporciona una API limpia y portátil, y los resúmenes de los mecanismos a nivel de sistema usados ??para proporcionar e fi ciente evento cationes fi caciones (kqueue, epoll, y la encuesta). También hemos escrito una cuña que implementa el semi-pública y threadWaitRead interfaces de threadWaitWrite. Esto significa que ni el núcleo fi le o la creación de redes de bibliotecas, ni otras bibliotecas O / I de bajo nivel, requieren cualquier cambio en el trabajo con y transparente se benefician de las mejoras en el rendimiento de-nuestro nuevo código.
Esto es, simplemente actualizar y cosas funcionan mágicamente mejor.
Aquí hay un poco de material de lectura: