基本上现代的操作系统都有自己类似与Linux中epoll的实现,在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)。
各个操作平台上都虽有Solaris的epoll实现:
各自epoll实现,很可惜这个方式还未标准化。不过一些开源的软件已经就此做了一些努力,尝试对这些系统之间差异的函数做了封装,比如Apache的APR (http://apr.apache.org/),它为UNIX/Linux程序抽象了底层平台各自的实现,包括Solaris的Event Completion Framework,BSD的Kqueue,Linux的epoll和poll。或者也可以参考使用BSD License的libevent(http://www.monkey.org/~provos/libevent/)。
分享到:
相关推荐
epoll高效处理消息,通过epoll的level出发模式实现
epoll如何实现的原理与实战
服务器与客户端建立连接需要使用到一些接口,包括但不限于...epollepoll底层通过红黑树来描述,并维护一个ready list,将事件表中已经就绪的事件添加到这里,在使用epoll_wait调用时,仅观察这个list中有没有数据即可。
使用select和epoll实现多路复用,并使用jmeter进行测试。压缩包包含代码和学生使用的完整实验报告
linux 通过 epoll 实现 tcp 服务器 代码
在linux系统下用epoll实现的简易聊天,简单的qq。所有源码都在里面,直接可运行,分为客户端和服务器两个文件夹
socket epoll实现。替代原有的select机制,更好的提供网络传输效率。
下面文章在这段时间内研究 select/poll/epoll的内核实现的一点心得体会: select,poll,epoll都是多路复用IO的函数,简单说就是在一个线程里,可以同时处理多个文件描述符的读写。 select/poll的实现很类似,epoll...
epoll阻塞实现cs通信,内有注释详解
https://blog.csdn.net/u014220105/article/details/84849570 可先参考相关描述,epoll实现tcp百万级高并发测试,代码仅用于测试和功能验证,并不是特别完善,不喜勿喷,欢迎指导
在Linux 系统下面用C 语言实现的高并发服务器的代码,具体用到了Epoll,线程池,数据库连接池。 具体可以看下连接http://blog.csdn.net/wuyuxing24/article/details/48758927
This program is free software; you can redistribute it and/or modify 6. * it under the terms of the GNU General Public License as published by 7. * the Free Software Foundation; either version 2 of ...
(无需积分,免费!!!)fd_event_list = epl.poll() # 进行循环解包,进一步判断 for fd, event in fd_event_list: # 循环第一次,如果 文件描述符 是tcp_socket的,就进行侦听分离new_socket ...
一个 linux 下 epoll 的实现小例子,方便epoll的初学者
golang 语言实现 epoll 在 Linux, MacOS and windows 平台上
多路IO复用-epoll,通过epoll实现事件通知,实现了水平(阻塞),边缘(非阻塞)触发
epoll函数实现多客户端并发,实现io多路复用功能。属于c语言网络编程的内容。
Vpp epoll实现的代码解析和vpp与上层应用进行报文交互流程解析
Reactor 模型开发效率上比起直接使用 IO 复用要高,...能够实现消息的接收与回发。分析了程序的不同以及各自的特点。 文件解释了epoll与reactor的区别之处,分析了各自的特点。并最后通过程序演示了reactor模型的结果。