Haskell Gleichzeitigkeit über kqueue
-
26-09-2019 - |
Frage
Ich schrieb gleichzeitige Anwendung und gefangen haben den Fehler:
buildFdSets: Dateideskriptors außerhalb des Bereichs
fand ich heraus, dass es die OS Begrenzung für die Anzahl von Datei-Deskriptoren in einem Prozess, in meinem FreeBSD es 1024
ist. Es ist die Grenze der select()
. Ich habe auch gelernt, dass es einen anderen Ansatz: kqueue()
.
Meine Fragen sind:
- Wie Grenze für Dateideskriptoren zu gewinnen?
- Wie
kqueue()
zu verwenden, anstattselect()
in Haskell-Programmen?
Lösung
Ich glaube, dass GHC 7 hat jetzt Unterstützung für die Verwendung kqueue () in seinem hinteren Ende:
Link auf Papier , beschreibende Blog-Post
Doch die Haskell-Plattform ist noch nicht aus für GHC 7.
Andere Tipps
Sie können einfach zu GHC 7 aktualisieren, die Teil der die Haskell Platform , die enthält :
Auf POSIX-Plattformen gibt es einen neuen I / O-Manager basierend auf epoll / kqueue / Umfrage, die Multithreading-I / O-Code maßstab zu einer viel größeren Anzahl (100k +) von Threads
erlaubt
Im Einzelnen:
Architektonisch unser neuer I / O-Manager besteht aus zwei Komponenten. Unsere Veranstaltungs Noti fi cation-Bibliothek bietet eine saubere und tragbare API, und abstrahiert die Systemebene Mechanismen verwendet effiziente bereitzustellen Ereignis Noti fi kationen (kqueue, epoll und poll). Wir haben auch einen Shim, dass Geräte der halböffentliche threadWaitRead geschrieben und threadWaitWrite Schnittstellen. Dies bedeutet, dass weder der Kern fi le oder Vernetzung Bibliotheken, noch andere Low-Level-I / O-Bibliotheken erfordern Änderungen an der Arbeit mit-und transparent pro fi tieren von den Leistungsverbesserungen der-neuen Code.
Das heißt, nur aktualisieren, und die Dinge funktionieren auf magische Weise besser.
Hier einiger Lesestoff: