Solaris下的epoll实现

Solaris上的epoll实现

 

 

基本上现代的操作系统都有自己类似与Linuxepoll的实现,在Solaris 10中我们可以选择使用/dev/poll或者Event Completion Framework

 

/dev/poll 或者叫做poll(7d)是一个特别的Driver,可以让你高效的poll大量的File Descriptor。因为/dev/poll将整个poll动作在内核中完成,具体使用可以查看Solaris Man Page,里面有一些实际的代码可供参考。
-bash-3.00$ man -s 7d poll

或者访问docs.sun.com: http://docs.sun.com/app/docs/doc/816-5177/6mbbc4g9q?l=zh&a=view

这里有一篇比较老的文章,大家也可以参考一下,里面有一些Benchmark数据:

http://developers.sun.com/solaris/articles/polling_efficient.html

 

 

不过这个机制,现在不推荐大家使用了,因为Solaris 10推出了更为出色的解决方案Event Completion Framework,也叫做Event Port。这个Framework提供更方便的Event-Driven 实现机制,更加优秀的API,抽象化操作各种Event,包括File descriptors, Sockets, Timers, Pipes, Message Queues, Asynchronous I/O, 自定义Events。具体可以参考这份文章,里面还有针对其它操作系统各自epoll实现的比较:

http://developers.sun.com/solaris/articles/event_completion.html

Solaris Man Page:

-bash-3.00$ man port_create

docs.sun.com: http://docs.sun.com/app/docs/doc/816-5168/6mbb3hris?l=zh&a=view


Sun

的工程师Dave Pacheco就这些Solaris上的Poll方式做过一些Benchmark的值,大家可以访问他的Blog (http://blogs.sun.com/dap/entry/event_ports_and_performance)

 

 

各个操作平台上都虽有Solarisepoll实现:

 

各自epoll实现,很可惜这个方式还未标准化。不过一些开源的软件已经就此做了一些努力,尝试对这些系统之间差异的函数做了封装,比如ApacheAPR (http://apr.apache.org/),它为UNIX/Linux程序抽象了底层平台各自的实现,包括SolarisEvent Completion FrameworkBSDKqueueLinuxepollpoll。或者也可以参考使用BSD Licenselibeventhttp://www.monkey.org/~provos/libevent/)。