I/O事件分派
来源:互联网 发布:剑指offer java版 编辑:程序博客网 时间:2024/06/06 03:21
在Linux上编写高并发TCP连接应用程序时,必须使用合适的网络I/O技术和I/O事件分派机制。
可用的I/O技术有同步I/O,非阻塞式同步I/O(也称反应式I/O),以及异步I/O。在高TCP并发的情形下,如果使用同步I/O,这会严重阻塞程序的运转,除非为每个TCP连接的I/O创建一个线程。但是,过多的线程又会因系统对线程的调度造成巨大开销。因此,在高TCP并发的情形下使用同步I /O 是不可取的,这时可以考虑使用非阻塞式同步I/O或异步I/O。非阻塞式同步I/O的技术包括使用select(),poll(),epoll等机制。异步I/O的技术就是使用AIO。
从I/O事件分派机制来看,使用select()是不合适的,因为它所支持的并发连接数有限(通常在1024个以内)。如果考虑性能,poll()也是不合适的,尽管它可以支持的较高的TCP并发数,但是由于其采用“轮询”机制,当并发数较高时,其运行效率相当低,并可能存在I/O事件分派不均,导致部分 TCP连接上的I/O出现“饥饿”现象。而如果使用epoll或AIO,则没有上述问题(早期 Linux内核的AIO技术实现是通过在内核中为每个I/O请求创建一个线程来实现的,这种实现机制在高并发TCP连接的情形下使用其实也有严重的性能问题。但在最新的Linux内核中,AIO的实现已经得到改进)。
综上所述,在开发支持高并发TCP连接的Linux应用程序时,应尽量使用epoll或AIO技术来实现并发的TCP连接上的I/O控制,这将为提升程序对高并发TCP连接的支持提供有效的I/O保证。
可用的I/O技术有同步I/O,非阻塞式同步I/O(也称反应式I/O),以及异步I/O。在高TCP并发的情形下,如果使用同步I/O,这会严重阻塞程序的运转,除非为每个TCP连接的I/O创建一个线程。但是,过多的线程又会因系统对线程的调度造成巨大开销。因此,在高TCP并发的情形下使用同步I /O 是不可取的,这时可以考虑使用非阻塞式同步I/O或异步I/O。非阻塞式同步I/O的技术包括使用select(),poll(),epoll等机制。异步I/O的技术就是使用AIO。
从I/O事件分派机制来看,使用select()是不合适的,因为它所支持的并发连接数有限(通常在1024个以内)。如果考虑性能,poll()也是不合适的,尽管它可以支持的较高的TCP并发数,但是由于其采用“轮询”机制,当并发数较高时,其运行效率相当低,并可能存在I/O事件分派不均,导致部分 TCP连接上的I/O出现“饥饿”现象。而如果使用epoll或AIO,则没有上述问题(早期 Linux内核的AIO技术实现是通过在内核中为每个I/O请求创建一个线程来实现的,这种实现机制在高并发TCP连接的情形下使用其实也有严重的性能问题。但在最新的Linux内核中,AIO的实现已经得到改进)。
综上所述,在开发支持高并发TCP连接的Linux应用程序时,应尽量使用epoll或AIO技术来实现并发的TCP连接上的I/O控制,这将为提升程序对高并发TCP连接的支持提供有效的I/O保证。
阅读全文
0 0
- I/O事件分派
- 事件对象I/O管理
- 重叠I/O-事件通知
- 重叠I/O-事件通知
- 事件驱动I/O模型
- Tapestry5 事件分派机制
- Tapestry5 事件分派机制
- Android事件分派机制
- Android事件分派机制
- Android事件分派机制
- Tapestry5 事件分派机制
- Socket I/O模型之重叠I/O(overlapped I/O)--事件通知
- WINDOWS SOCKET 重叠I/O 事件对象
- WINDOWS SOCKET 重叠I/O 事件对象
- libevent源码分析--I/O事件
- 重叠I/O之事件对象通知
- 重叠I/O之事件对象通知
- Overlapped重叠I/O之事件通知
- 搭建flask网站全过程
- Android 中Fragment+ViewPage+Tablayout 实现 左右滑动(新学的方法)
- pthread_join和pthread_detach的作用
- iOS json 数据遇到[__NSCFString count] 错误
- Js apply()使用详解
- I/O事件分派
- android自定义弹出框样式实现
- tensorflow 注意命名
- 网络编程UDP和TCP的简单使用
- OPC client学习 2017.5.18
- uva213解题报告
- 排序算法总结(1)--选择排序
- 初试tensorflow
- vb.net 教程 3-11 窗体控件综合编程 2-1