有人询问我网上一篇关于“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内核系统了几个调用

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和nginx以及java NIO可以支持多大的并发相关推荐

  1. Kafka源码深度解析-序列3 -Producer -Java NIO

    原文地址 在上一篇我们分析了Metadata的更新机制,其中涉及到一个问题,就是Sender如何跟服务器通信,也就是网络层.同很多Java项目一样,Kafka client的网络层也是用的Java N ...

  2. Linux内核学习(五):linux kernel源码结构以及makefile分析

    Linux内核学习(五):linux kernel源码结构以及makefile分析 前面我们知道了linux内核镜像的生成.加载以及加载工具uboot. 这里我们来看看linux内核的源码的宏观东西, ...

  3. v18.02 鸿蒙内核源码分析(源码结构) | 内核文件各自含义 | 百篇博客分析HarmonyOS源码

    子曰:"富而可求也,虽执鞭之士,吾亦为之.如不可求,从吾所好." <论语>:述而篇 百篇博客系列篇.本篇为: v18.xx 鸿蒙内核源码分析(源码结构篇) | 内核文件 ...

  4. Colly源码解析——结合例子分析底层实现

    通过<Colly源码解析--框架>分析,我们可以知道Colly执行的主要流程.本文将结合http://go-colly.org上的例子分析一些高级设置的底层实现.(转载请指明出于break ...

  5. Android源码和内核源码的下载,编译和执行

    笔者依据罗升阳老师的<Android 系统源码情景分析>一书,尝试下载,编译和执行Android源码和内核源码.但可能是软件源"被墙"或版本号更新的原因.期间遇到诸多问 ...

  6. Linux驱动入门(三)——源码下载阅读、分析和嵌入式文件系统介绍

    文章目录 从内核出发 获取内核源码 使用Git 安装内核源码 使用补丁 阅读Linux内核源码 Source Insight简介 阅读源码 内核开发的特点 无libc库抑或无标准头文件 GNU C 没 ...

  7. access驱动程序_Linux驱动程序学习二 (续) scull 源码在内核5.4.0上的编译调试

    <LINUX设备驱动程序>第三章提供了源码scull,但是由于我用的是5.4.0内核,书中的是2.6.10内核,内核发生了很大的变化,因此编译scull源码花费了不少时间,下面是编译调试记 ...

  8. 最新友价T5仿虚拟交易商城网站源码+PHP内核

    正文: 最新友价T5仿虚拟交易商城网站源码+PHP内核,采用最新友价版本二次开发,内含几套模板. 程序: wwtjd.lanzoum.com/i45Xm09cm84b 图片:

  9. PHP手机版源码下载分期系统源码Thinkphp内核开发集成支付,短信功能,征信对接

    PHP手机版源码下载分期系统源码Thinkphp内核开发集成支付,短信功能,征信对接下载链接:https://pan.baidu.com/s/17THZSi8MNV4n7oUZoYRyRg 提取码:8 ...

最新文章

  1. 'ModelOptions' object has no attribute 'get_field_names
  2. Android应用开发:页面跳转和数据传递
  3. Call 从一个批处理程序调用另一个批处理程序,并且不终止父批处理程序。
  4. GMPC:一个 MPD 客户端
  5. koa-mysql(三)
  6. UVA 11100 The Trip, 2007
  7. springmvc_3(将数据放入map中)
  8. 亚信科技笔试面试2019届
  9. 动态规划问题中最长公共子序列---C语言实现
  10. linux sipp 呼叫转移_SIPp 学习笔记 一 (安装)
  11. Vuejs 事件监听
  12. 创建对象、原型、原型链
  13. python中的urllib模块中的方法
  14. sonar pmd\p3c插件源码初步解析
  15. 解决HbuildX无法打开html文件的问题
  16. openwrt PPPoE拨号如何设置-小米3硬改
  17. 人工智能历史回眸:达特茅斯会议
  18. sgx芯片服务器,英特尔SGX概述:SGX内部实现分析研究(part1)
  19. 【算法之动态规划(一)】动态规划(DP)详解
  20. 安兔兔电脑ssd测试软件,安兔兔SSD测试软件测评,威钰战国NVMe SSD

热门文章

  1. php div图片局部刷新,前端jquery 后端 thinkphp 实现局部刷新
  2. 随笔:送给初次使用PCL库的小伙伴
  3. 2021 年高教社杯全国大学生数学建模竞赛A题分析
  4. MATLAB判断三角形成立的编程,Triangulation 划分三角形网络时用到的大量算法和测试例程 matlab 259万源代码下载- www.pudn.com...
  5. authc过滤器 shiro_shrio 权限管理filterChainDefinitions过滤器配置
  6. java 读取流的字符编码格式_如何使用Java代码获取文件、文件流或字符串的编码方式...
  7. bootstrap 新闻列表_kuapingUI 2.2 版本发布,跨屏 UI-bootstrap 大组件 UI 框架
  8. 文件系统类型是ntfs无法确定卷版本和状态_硬盘写到一半时断电,文件系统里会发什么?...
  9. 大学计算机思维导图_我学计算机,也会修电脑
  10. wpf 多线程处理同步数据_一文带你理解多线程的实际意义和优势