linux 内核 的 I/O 模型 (总结)

来源:互联网 发布:武林外传龙门镖局知乎 编辑:程序博客网 时间:2024/05/08 17:46

发现 那些开源 框架 都离不开 linux 内核 的 I/O 模型
(感觉 看过好几次,没看懂 总结 一下)

必须有图 有文字
必须有图 有文字
必须有图 有文字
重要事 说三遍

1.Memcache 基于 libevent libevent 的 先进 是因为

采用了 新的 I/O 模型 epoll

Nginx 速度快于 Apache 因为 大并发下 网络I/O ,nginx 使用了行的I/O 方法

epoll (apache 采用的是 老的 select 模型)

首先 有一个队列: to find one of them 。 One : address & name

select : 轮询

· 并且,在linux/posix_types.h头文件有这样的声明:
· #define __FD_SETSIZE 1024

fd filedescriptor 文件描述符 整数 linux 抽象出来 用来描述 各种文件(内核(kernel)利用文件描述符(file descriptor)来访问文件)(基于文件描述符的I/O操作兼容POSIX标准)

Socket file fd

kqueue

Select poll epoll

Select epoll 解释

假设你在大学读书,住的宿舍楼有很多间房间,你的朋友要来找你。
select版宿管大妈就会带着你的朋友挨个房间去找,直到找到你为止。
而epoll版宿管大妈会先记下每位同学的房间号,
你的朋友来时,只需告诉你的朋友你住在哪个房间即可,不用亲自带着你的朋友满大楼找人。
如果来了10000个人,都要找自己住这栋楼的同学时,select版和epoll版宿管大妈,谁的效率更高,不言自明。

这里写图片描述

图片
Select :

这里写图片描述

Epoll
epoll通过在sock上注册的回调函数来使得软中断服务程序,在发生事件时调用此函数把准备好的sock复制到一个链表上。避免进程不知道哪个sock准备好了来进行轮询。

这里写图片描述

这里写图片描述

这里写图片描述

0 0