基本上现代的操作系统都有自己类似与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实现的echo服务器示例: ```c #include <sys/epoll.h> #include #include #include #include #include int main() { int server_sockfd, client_sockfd; struct sockaddr_in server_...
本文将详细解析一个简单的C语言实现的代理服务器,特别针对SOLARIS操作系统。这个代理服务器的代码是为服务器软件开发提供基础的理解和实践。 首先,我们需要了解代理服务器的基本工作原理。代理服务器接收来自...
对于高并发服务器,可以使用多线程或多进程处理多个客户端连接,或者利用Solaris的异步I/O(AIO)和事件通知机制(如select、poll、epoll)。 12. **性能优化**: 在Solaris中,可以通过调整内核参数,如TCP缓冲...
10. **移植性与兼容性**:Oracle Solaris 11.3致力于保持向后兼容,以确保旧版本的软件能在新版本上运行,同时提供一些工具和服务来帮助开发者将应用程序从其他平台迁移到Solaris。 这本书不仅介绍了这些接口的用法...
4. **多路复用I/O**:利用 `select()`, `poll()`, 或 `epoll()` 实现非阻塞I/O和多路复用,提高程序的并发处理能力。 5. **错误处理**:理解和处理网络编程中的错误,如 `errno` 和 `perror()` 的使用。 6. **套接...
在类unix系统中有五大I/O模型,依次为阻塞IO(BIO)、非阻塞IO(NIO)、IO多路复用(linux下有select、poll、epoll三种方案)、信号驱动IO、异步IO(前面四...IOCP是window基于线程池技术实现的异步IO,非常稳定。
Windows上采用iocp、Linux上采用epoll、Bsd上采用kqueue。 5、功能强大、灵活 kangle的访问控制理念来自linux的iptables防火墙,kangle拥有功能最小化的匹配模块和标记模块,通过组合,反转等可以实现用户最复杂的...
不同的操作系统使用不同的底层技术来实现非阻塞 I/O,如 Windows 使用 IOCP,Linux 使用 epoll,Mac 使用 kqueue,Solaris 使用 eventports。 #### 四、案例分析 - **LinkedIn**:LinkedIn 报告称,在采用 Node.js...
综上所述,通过采用epoll/kqueue/dev_poll等高效事件驱动模型,并结合非阻塞I/O和单线程服务多客户端的策略,可以有效地解决C10K问题,实现服务器在高并发场景下的高效稳定运行。未来,随着网络技术和硬件性能的不断...
Windows上采用iocp、Linux上采用epoll、Bsd上采用kqueue。 5、功能强大、灵活 kangle的访问控制理念来自linux的iptables防火墙,kangle拥有功能最小化的匹配模块和标记模块,通过组合,反转等可以实现用户最复杂的...
Windows上采用iocp、Linux上采用epoll、Bsd上采用kqueue。 5、功能强大、灵活 kangle的访问控制理念来自linux的iptables防火墙,kangle拥有功能最小化的匹配模块和标记模块,通过组合,反转等可以实现用户最复杂的...
6. **KqueueSelector**: 基于kqueue(主要在FreeBSD、Mac OS X等BSD系统上使用)系统调用实现的Selector。 7. **DefaultSelector**: 这是一个工厂类,会根据运行时环境自动选择最有效的Selector实现。因此,大多数...
- **/dev/poll (Solaris 2.7+)**:为Solaris设计的一种改进版本,提供了更好的性能。 - **kqueue (FreeBSD, NetBSD)**:在FreeBSD和NetBSD中提供了一种高效的事件通知机制。 2. **Linux系统**: - **epoll ...
- **epoll(Linux 2.6+)**:相较于传统的select()和poll(),epoll提供了更高效的事件通知机制,非常适合处理大量并发连接。 - **Polyakov's kevent(Linux 2.6+)**:基于FreeBSD的kqueue进行了改进,用于Linux...
这本书不仅适用于Linux,也适用于各种UNIX变体,如Solaris、AIX、HP-UX等。通过阅读本书,读者可以掌握构建高效、稳定、可移植的UNIX程序所需的知识和技巧。 首先,本书涵盖了UNIX系统的基本概念,包括进程管理、...
在FreeBSD和其他类Unix系统上的kqueue,以及Solaris上的event ports。这些机制都是为了在大量并发连接时提高效率和性能。 3. **API介绍**: - `event_base_new()`:创建一个新的事件基础结构,这是所有事件处理的...
例如,一台配备1000MHz处理器、2GB RAM及1000Mbit/s以太网卡的机器,理论上足以支持每秒为20000个客户端提供服务,每个客户端的平均需求为50KHz、100KB数据量和50Kbits/s的带宽。这表明,在当前的硬件配置下,实现...
1. **事件模型**:libevent支持多种事件模型,如epoll(Linux)、kqueue(FreeBSD、Mac OS X)、event ports(Solaris)和select/poll。这些模型在不同的操作系统上提供了高效的事件处理能力,使得libevent能够在...
5. /dev/poll (Solaris):适用于Solaris操作系统。 在Python中使用libevent,通常通过C语言编写的扩展模块如`pylibevent`或`levent`来实现。这些扩展允许Python程序员访问libevent的功能,创建异步网络服务。例如,...
NGINX支持多种事件模型,如epoll(Linux)、kqueue(FreeBSD)、event ports(Solaris)等,这些模型允许NGINX高效处理大量并发连接,实现非阻塞I/O。 7. **模块化设计** NGINX的模块化设计使得扩展功能变得简单...