ano*_*mos 4 asynchronous io-completion-ports
在Mac OS X上是否有任何等效的IO COmpletion端口用于在文件上实现异步IO ....
谢谢....
很不幸的是,不行.
kqueue是OSX和FreeBSD上高性能异步i/o的机制.与Linux epoll一样,与IOCP(Solaris,AIX,Windows)相比,它在i/o的另一端发出信号.当可以尝试读取或写入时,kqueue和epoll将发出信号,而IOCP将在读取或写入完成时进行回调.许多人发现,与IOCP模型相比,epoll和kqueue使用的信令机制难以理解.因此,尽管kqueue和IOCP都是高性能异步i/o的机制,但它们无法比较.
可以使用epoll或kqueue和线程池实现IOCP.您可以在Wine项目中找到相关示例.
更正:
Mac OS X在Grand Central Dispatch中实现了类似IOCP的功能.它在内部使用GCD线程池和kqueue API.方便的功能是dispatch_read和dispatch_write.与IOCP一样,GCD中的异步I/O函数在I/O任务完成时发出信号,而不是像原始kqueue API那样准备好文件描述符.
请注意,GCD API不是"叉安全",并且不能在fork没有的情况下在POSIX的两侧使用exec.如果这样做,函数调用将永远不会返回.
还要注意Mac OS X中的kqueue传言在FreeBSD中的性能要比kqueue低,所以开发可能比生产更好.然而,GCD(libdispatch)是开源的,也可以在其他平台上使用.
2015年1月3日更新:
FreeBSD从版本8.1开始使用GCD.Wine有基于epoll的Linux IOCP.因此,可以使用IOCP设计来编写应在Windows,Linux,Solaris,AIX,FreeBSD,MacOSX(和iOS,但不是Android)上运行的服务器代码.这与直接使用kqueue和epoll不同,其中必须重新构建Windows服务器以使用其IOCP,并且很可能性能较差.
| 归档时间: |
|
| 查看次数: |
1507 次 |
| 最近记录: |