Gibt es ein Äquivalent von IO COmpletion Ports auf Mac OS X für die Implementierung von Asynchronous IO auf Dateien....
Dankeschön....
Gibt es ein Äquivalent von IO COmpletion Ports auf Mac OS X für die Implementierung von Asynchronous IO auf Dateien....
Dankeschön....
Leider nein.
kqueue ist der Mechanismus für leistungsstarke asynchrone E/A unter OSX und FreeBSD. Wie Linux epoll signalisiert es im Vergleich zu IOCPs (Solaris, AIX, Windows) das entgegengesetzte Ende der E/A. kqueue und epoll signalisieren, wenn es in Ordnung ist, einen Lese- oder Schreibversuch zu unternehmen, während IOCPs zurückrufen, wenn ein Lese- oder Schreibvorgang abgeschlossen ist. Viele finden den von epoll und kqueue verwendeten Signalisierungsmechanismus im Vergleich zum IOCP-Modell schwer zu verstehen. Obwohl kqueue und IOCP also beide Mechanismen für asynchrone Hochleistungs-E/A sind, sind sie nicht vergleichbar.
Es ist möglich, IOCPs mit epoll oder kqueue und einem Threadpool zu implementieren. Ein Beispiel dafür finden Sie im Wine-Projekt.
Berichtigung:
Mac OS X hat eine Implementierung von IOCP-ähnlichen Funktionen in Grand Central Dispatch . Er verwendet intern die GCD-Threadpool- und Kqueue-APIs. Überzeugende Funktionen sind dispatch_read
y dispatch_write
. Wie IOCP signalisieren die asynchronen E/A-Funktionen in GCD den Abschluss einer E/A-Aufgabe und nicht, wenn der Dateideskriptor bereit ist, wie bei der rohen Kqueue-API.
Beachten Sie, dass GCD-APIs nicht "fork-sicher" sind und nicht auf beiden Seiten einer POSIX fork
ohne einen exec
. Wenn Sie dies tun, wird der Funktionsaufruf niemals zurückkehren.
Beachten Sie auch, dass kqueue in Mac OS X Gerüchten zufolge weniger performant ist als kqueue in FreeBSD, so dass es für die Entwicklung besser geeignet sein könnte als für die Produktion. GCD (libdispatch) ist Offene Quelle und kann auch auf anderen Plattformen verwendet werden.
Update 3. Jan. 2015 :
FreeBSD hat GCD ab Version 8.1. Wine hat epoll-basiertes IOCP für Linux. Es ist daher möglich, IOCP-Design zu verwenden, um Servercode zu schreiben, der auf Windows, Linux, Solaris, AIX, FreeBSD, MacOSX (und iOS, aber nicht Android) laufen sollte. Dies unterscheidet sich von der direkten Verwendung von kqueue und epoll, wo ein Windows-Server umstrukturiert werden muss, um seine IOCPs zu verwenden, und sehr wahrscheinlich weniger leistungsfähig ist.
Da Sie nach einer Windows-spezifischen Funktion für OS X gefragt haben, können Sie statt der direkten Verwendung von kqueue versuchen libevent . Es ist ein dünner Wrapper zu verschiedenen AIO-Mechanismen und es funktioniert auf beiden Plattformen.
CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.