Mac OS X 的 IO 完成端口

发布于 2024-11-14 14:18:59 字数 70 浏览 3 评论 0原文

Mac OS X 上是否有等效的 IO COmpletion 端口用于在文件上实现异步 IO...

谢谢...

Is there any equivalent of IO COmpletion ports on Mac OS X for implementing Asynchronous IO on files....

Thank you....

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

︶葆Ⅱㄣ 2024-11-21 14:18:59

不幸的是,没有。

kqueue 是 OSX 和 FreeBSD 上高性能异步 I/O 的机制。与 Linux epoll 一样,与 IOCP(Solaris、AIX、Windows)相比,它在 i/o 的另一端发出信号。 kqueue 和 epoll 将在可以尝试读取或写入时发出信号,而 IOCP 将在读取或写入完成时回调。许多人发现 epoll 和 kqueue 使用的信号机制与 IOCP 模型相比很难理解。因此,虽然 kqueue 和 IOCP 都是高性能异步 I/O 的机制,但它们不具有可比性。

可以使用 epoll 或 kqueue 和线程池来实现 IOCP。您可以在 Wine 项目中找到一个示例。

更正:

Mac OS X 在 Grand Central Dispatch 它在内部使用 GCD 线程池和 kqueue API。方便的函数是 dispatch_readdispatch_write。与 IOCP 一样,GCD 中的异步 I/O 函数会在 I/O 任务完成时发出信号,而不是像原始 kqueue API 那样在文件描述符准备就绪时发出信号。

请注意,GCD API 不是“fork 安全”的,并且不能在没有 exec 的情况下在 POSIX fork 的两侧使用。如果这样做,函数调用将永远不会返回。

另请注意,据说 Mac OS X 中的 kqueue 性能不如 FreeBSD 中的 kqueue,因此它可能更适合开发而不是生产。不过,GCD (libdispatch) 是开源,也可以在其他平台上使用。

2015 年 1 月 3 日更新

FreeBSD 从 8.1 版本开始有了 GCD。 Wine 具有适用于 Linux 的基于 epoll 的 IOCP。因此,可以使用 IOCP 设计来编写应在 Windows、Linux、Solaris、AIX、FreeBSD、MacOSX(和 iOS,但不是 Android)上运行的服务器代码。这与直接使用 kqueue 和 epoll 不同,后者必须重组 Windows 服务器才能使用其 IOCP,并且性能很可能较低。

Unfortunately, no.

kqueue is the mechanism for high-performance asynchronous i/o on OSX and FreeBSD. Like Linux epoll it signals in the opposite end of i/o compared to IOCPs (Solaris, AIX, Windows). kqueue and epoll will signal when it's ok to attempt a read or a write, whereas IOCPs will callback when a read or a write has completed. Many find the signalling mechanism used by epoll and kqueue difficult to understand compared to the IOCP model. So while kqueue and IOCP are both mechanisms for high-performance asynchronous i/o, they are not comparable.

It is possible to implement IOCPs using epoll or kqueue and a thread pool. You can find an example of that in the Wine project.

Correction:

Mac OS X has an implementation of IOCP like functions in Grand Central Dispatch. It uses the GCD thread pool and kqueue APIs internally. Convinience functions are dispatch_read and dispatch_write. Like IOCP the asynchronous I/O functions in GCD signals at the completion of an I/O task, not when the file descriptor is ready like the raw kqueue API.

Beware that GCD APIs are not "fork safe", and cannot be used on both sides of a POSIX fork without an exec. If you do, the function call will never return.

Also beware that kqueue in Mac OS X is rumored to be less performant than kqueue in FreeBSD, so it might be better for development than production. GCD (libdispatch) is Open Source however, and can be used on other platforms as well.

Update Jan 3, 2015:

FreeBSD has GCD from version 8.1. Wine has epoll-based IOCP for Linux. It is therefore possible to use IOCP design to write server code that should run on Windows, Linux, Solaris, AIX, FreeBSD, MacOSX (and iOS, but not Android). This is different from using kqueue and epoll directly, where a Windows server must be restructured to use its IOCPs, and very likely be less performant.

旧人九事 2024-11-21 14:18:59

由于您要求 OS X 具有 Windows 特定功能,因此您可以尝试 libevent,而不是直接使用 kqueue 。它是不同 AIO 机制的薄包装,并且可以在两个平台上工作。

Since you asked for a Windows specific feature for OS X, instead of using kqueue directly you may try libevent. It's a thin wrapper to different AIO mechanisms and it work on both platforms.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文