IO模型

来源:互联网 发布:最好的养生软件 编辑:程序博客网 时间:2024/04/30 03:13

最近看了腾讯的郭欣写的 高性能web站点的文章。 结合现有的项目经验。 写点名称总结

 

同步阻塞IO:  如对磁盘文件的读写操作。 这里指的是进程。如accept() connect() 

同步非阻塞IO: 就是使用recv操作时,没有数据可读时,可以直接返回。

多路IO就绪通知:就是 select;poll;epoll;

 

作者举的是上街买东西的例子。 生动形象,如epoll是在大屏幕上注册了短信平台。 做好东西通知你过来取。

 

epoll的详细实现,会过些天总结写下。

 

异步IO;  同步主动请求并等待IO操作完毕,数据的读写必须阻塞;异步IO主动请求数据后便继续处理其他任务,等待I/O操作完毕后通知。

linux 2.6.16 中说这个还在实现。 

这个不是很明白的。 epoll事件通知,有数据时IO才做相应的操作。 如果这个时候I/O的读写操作完毕也是由事件触发,这个是谁来监听该事件?

 

结合自己写过的现有模型。

IO模型。 1个listen thread -- n个work thread

这个的模型为listen 的epoll_wait()在建立好连接后,分发给各个work thread的epoll_wait。由work thread的epoll_wait完成后续的读写转发操作。 socket均为 非阻塞。

 

内存模型: mem pool;等块内存

 

测试最后优化的瓶颈为CPU上。 在 IO 操作繁忙的情况下会造成CPU的调度超时,如connect. 

采用方法:控制并发和吞吐量。 

 

 

原创粉丝点击