Есть ли какой-либо эквивалент портов IO COMpletion в Mac OS X для реализации асинхронного ввода-вывода в файлах....
Спасибо....
Есть ли какой-либо эквивалент портов IO COMpletion в Mac OS X для реализации асинхронного ввода-вывода в файлах....
Спасибо....
Поскольку вы запрашивали специальную функцию Windows для OS X, вместо прямого использования kqueue вы можете попробовать libevent . Это тонкая оболочка для различных механизмов AIO, которая работает на обеих платформах.
К сожалению, нет.
kqueue — это механизм высокопроизводительного асинхронного ввода-вывода в OSX и FreeBSD. Как и epoll в Linux, он сигнализирует на противоположном конце ввода-вывода по сравнению с IOCP (Solaris, AIX, Windows). kqueue и epoll будут сигнализировать, когда можно попытаться выполнить чтение или запись, тогда как IOCP будут выполнять обратный вызов, когда чтение или запись будут завершены. Многие считают механизм сигнализации, используемый epoll и kqueue, сложным для понимания по сравнению с моделью IOCP. Таким образом, хотя kqueue и IOCP являются механизмами для высокопроизводительного асинхронного ввода-вывода, они несопоставимы.
Можно реализовать IOCP с помощью epoll или kqueue и пула потоков. Вы можете найти пример этого в проекте Wine.
Исправление:
В Mac OS X есть реализация функций, подобных IOCP, в Grand Central Dispatch. Он использует для внутренних целей пул потоков GCD и API kqueue. Функции удобства: dispatch_read
и dispatch_write
. Подобно IOCP, функции асинхронного ввода-вывода в GCD сигнализируют о завершении задачи ввода-вывода, а не о готовности файлового дескриптора, как в необработанном API kqueue.
Имейте в виду, что API-интерфейсы GCD не являются «безопасными для разветвления» и не могут использоваться с обеих сторон POSIX fork
без exec
. Если вы это сделаете, вызов функции никогда не вернется.
Также имейте в виду, что, по слухам, kqueue в Mac OS X менее производительна, чем kqueue во FreeBSD, так что это может быть лучше для разработки, чем для производства. Однако GCD (libdispatch) имеет открытый исходный код и может использоваться и на других платформах.
Обновление от 3 января 2015 г.:
FreeBSD имеет GCD с версии 8.1. Wine имеет IOCP на основе epoll для Linux. Таким образом, можно использовать дизайн IOCP для написания серверного кода, который должен работать в Windows, Linux, Solaris, AIX, FreeBSD, MacOSX (и iOS, но не Android). Это отличается от прямого использования kqueue и epoll, когда сервер Windows должен быть реструктурирован для использования своих IOCP и, скорее всего, будет менее производительным.
Использовать очередь
http://en.wikipedia.org/wiki/Kqueue