Haskell параллелизм над Kqueue - PullRequest
       76

Haskell параллелизм над Kqueue

6 голосов
/ 19 ноября 2010

Я написал параллельное приложение и обнаружил ошибку:

buildFdSets: дескриптор файла вне диапазона

Я обнаружил, что это предел ОС для числафайловых дескрипторов в одном процессе, в моем FreeBSD это 1024.Это предел select().Также я узнал, что есть другой подход: kqueue().

Мои вопросы:

  • Как выиграть ограничение на файловые дескрипторы?
  • Как использовать kqueue() вместо select() в программах на Haskell?

Ответы [ 2 ]

4 голосов
/ 19 ноября 2010

Я считаю, что GHC 7 теперь поддерживает использование kqueue () в своем бэкэнде:

ссылка на статью , описательное сообщение в блоге

Однако платформа Haskell еще не выпущена для GHC 7.

3 голосов
/ 03 мая 2011

Вы можете просто обновить GHC 7, который является частью Платформы Haskell , которая включает :

На платформах POSIX естьновый менеджер ввода / вывода на основе epoll / kqueue / poll, который позволяет многопоточному коду ввода / вывода масштабироваться до гораздо большего числа (100k +) потоков

В частности:

Архитектурно наш новый менеджер ввода / вывода состоит из двух компонентов.Наша библиотека уведомлений о событиях предоставляет чистый и переносимый API и абстрагирует механизмы системного уровня, используемые для предоставления эффективных уведомлений о событиях (kqueue, epoll и poll).Мы также написали оболочку, которая реализует полупубличные интерфейсы threadWaitRead и threadWaitWrite.Это означает, что ни базовым файлам, ни сетевым библиотекам, ни другим низкоуровневым библиотекам ввода-вывода не требуется никаких изменений для работы с нашим новым кодом, а также их прозрачная выгода от повышения производительности.

То есть просто модернизируйте, и все будет работать волшебным образом.

Вот некоторые материалы для чтения:

...