Eine etwas befriedigende Antwort:
Das Herz des neuen GHC IO Managers ist eine kqueue()/epoll()
Ereignisschleife. Ich würde also erwarten, dass alles, was darauf aufgebaut werden kann, berechtigt ist - wenn nicht jetzt, dann später. Insbesondere bedeutet dies:
Der Code (ich sah es vor einigen Monaten und die Dinge geändert haben könnten) enthält auch Unterstützung für die Registrierung und laufenden Timeouts verschiedener Arten über eine Prioritäts- (Such-) Warteschlange. Dies deutet darauf hin, dass die meisten sleep
-ähnliche Anrufe auch auf der Schnittstelle piggybacking sein können.
Über Datenbankzugriff: Sicher, Sie greifen oft auf die Datenbank über einen Netzwerk-IO-Socket so Aufruf forkIO
und tun DB-Zugriff in einem separaten Thread sollte machbar, schnell und sicher sein. Die Datenübertragung an den Rest der Anwendung kann mit einer der Nebenläufigkeitsmitteln Chan
oder STM.TChan
erfolgen.
Ich glaube nicht, dass es Arten von IO gibt, wo der Manager auf Blockierung per se zurückgreifen muss, aber ich kann mir vorstellen, dass einige Bibliotheken den neuen IO-Manager umgehen und direkt auf die Jugularis zugehen. Sie werden natürlich blockieren.
Wow ... 4 Favoriten, aber nur ein upvote. Das ist seltsam. – fuz
@FUZxxl StackOverflow hat Favoriten? Das habe ich aufgrund deines Kommentars nur gemerkt. – alternative
@monadisch Ja, gibt es. Drücken Sie einfach den Startknopf direkt unter einer Frage, um es zu favorisieren. Wenn sich etwas ändert, erhalten Sie eine Benachrichtigung, als ob es Ihre eigene Frage ist. – fuz