从源码和内核角度分析redis和nginx以及java NIO可以支持多大的并发
2020-04-19 19:55
447 查看
有人询问我网上一篇关于“redis为什么单线程这么快”的文章,我建议他不要看了,因为redis是单进程不是单线程,后面的意见不用看了,文章质量肯定不会很好,他也说了自己看了很久源码似乎还是有些云里雾里,所以我就给他分析了为什么redis这么快,这篇主要讲epoll的实现。
从redis和nginx源码和llinux内核角度分析redis和nginx可以支持多大的并发.
redis和nginx都使用epoll。
这篇专栏你可以看到怎么结合内核源码的角度分析epoll的红黑树数据结构以及linux的文件句柄。
内核版本linux-5.5.7,redis版本redis-5.0.7,nginx版本nginx-1.16.1,jdk版本1.8。
对于epoll内核系统了几个调用
[code]1.执行epoll_create时,创建了红黑树和就绪list链表。 2.执行epoll_ctl时,如果增加fd(socket),则检查在红黑树中是否存在,存在立即返回,不存在则添加到红黑树上,然后向内核注册回调函数,用于当中断事件来临时向准备就绪list链表中插入数据。 3.执行epoll_wait时立刻返回准备就绪链表里的数据即可。
redis和nginx,Tomcat netty都是先调用epoll_create创建一个epoll句柄,然后外界有请求过来用epoll_ctl增加事件,有响应会接收到epoll_wait上的响应事件。基本就是这样一个套路,这篇只分析下epoll_create。
先看redis源码
首先用epoll_create创建一个epoll句柄。
相关文章推荐
- 【源码分析】redis网络通讯并发架构简介
- jQuery源码分析以及从jQuery对象创建的角度理解extend方法的原理
- springboot源码分析14-ApplicationContextInitializer原理Springboot中PropertySource注解多环境支持以及原理
- java并发锁ReentrantLock源码分析一 可重入支持中断锁的实现原理
- spring-data-redis源码分析以及代码漏洞
- Javascript笔记:jQuery源码分析以及从jQuery对象创建的角度理解extend方法的原理
- nginx源码分析 +redis的那些事儿
- 从源码角度分析linearLayout测量过程以及weight机制
- 高并发之——从源码角度分析创建线程池究竟有哪些方式
- Hashmap和hashtable三大区别(从源码角度分析为什么map可以存放一个key为null,多个值为null)的特点
- Nginx源码分析 - Nginx启动以及IOCP模型
- 多线程并发Future模式应用以及jdk源码分析
- 从源码的角度带你分析Glide整体加载流程以及设计模式
- Linux内核源码分析——compiler.h分析
- redis源码分析(3)——redis链表
- Nginx源码分析:3张图看懂启动及进程工作原理
- Nginx源码分析:3张图看懂启动及进程工作原理
- nginx 源码分析
- Java并发系列之AbstractQueuedSynchronizer源码分析(条件队列)
- 浅析ArrayList源码(一)————变量以及构造方法分析