Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit c8784d3

Browse files
committed
add redis readme
1 parent d2f77e6 commit c8784d3

File tree

1 file changed

+12
-1
lines changed

1 file changed

+12
-1
lines changed

springboot-jedis-sample/README.md

+12-1
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,17 @@ Epoll模型属于诸多IO多路服用模型中的一种,但是相比其他IO
3131
> - select的触发方式是水平触发,应用程序如果没有完成对一个已经就绪的文件描述符IO操作,那么之后每次select调用还是会将这些文件描述符通知进程去处理;
3232
> - poll相比select模型,poll使用链表保存描述符,因此没有监视文件数量的限制,pollfd支持复用仅初始化一次,但是依然存在fd拷贝和遍历问题;
3333
34-
**Epoll IO多路复用模型实现机制**
34+
**Epoll IO多路复用模型实现机制:**
35+
由于epoll的实现机制与select/poll机制完全不同,上面所说的select的缺点在epoll中不复存在。
36+
epoll没有这个限制,它所支持的FD上限是最大可以打开文件的数目,这个数字一般远大于2048,举个例子:在1GB的内存机器上大约是10万左右的最大连接。
37+
38+
Epoll如何实现高并发的?
39+
在select/poll时代,服务器进程每次都需要把连接告诉操作系统(从用户态复制句柄数据到内核态),让操作系统内核去内核查询这些套接字上是否有事件变化,轮训完后再复制到用户态,让服务器应用程序轮询处理已发生的网络事件,这个过程消耗较大,因此select/poll无法处理几千个并发连接。
40+
epoll的设计和实现与select完全不同,epoll通过在linux内核中申请一个简易的文件系统(采用B+Tree结构存储)。把原先的select/poll调用分为3个部分:
41+
> - 调用epoll_create()建立一个epoll对象(在epoll文件系统中这个句柄对象分配资源);
42+
> - 调用epoll_ctl向epoll对象添加套接字;
43+
> - 调用epoll_wait收集发生事件的连接;
44+
在进程启动时创建一个epoll对象,然后在需要的时候向这个epoll对象中添加或者删除连接。同时,epoll_wait的效率也非常高,因为epoll_wait时,并没有一股脑的想操作系统复制连接句柄数据,内核也不需要去遍历全部连接。
45+
3546

3647

0 commit comments

Comments
 (0)