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 de select() en los programas de Haskell?
¿Fue útil?

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:

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top