发现 那些开源 框架 都离不开 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准备好了来进行轮询。