深入理解 tornado 之底层 ioloop 实现
最近打算学习 tornado 的源码,所以就建立一个系列主题 “深入理解 tornado”。 在此记录学习经历及个人见解与大家分享。文中一定会出现理解不到位或理解错误的地方,还请大家多多指教
【Redis学习笔记】2018-05-30 Redis源码学习之Ziplist、Server
作者:施洪宝 顺风车运营研发团队一. 压缩列表压缩列表是Redis的关键数据结构之一。目前已经有大量的相关资料,下面几个链接都已经对Ziplist进行了详细的介绍。
Tornado进阶-从源码开始(转载)
一、tornado概述 二、epoll预备 三、源码结构 四、tornado的http层 五、tornado的tcp层 六、tornado的ioloop分析 七、tornado请求1 八、tornado请求2 ps: 在此感谢jason_wang同学,附其博客地址
Redis 中的事件
每个 CS 模式程序,尤其是高并发的网络服务端程序都有自己的网络异步事件处理库,Redis不例外。Redis 基于 Reactor 模型 封装了自己的事件驱动模型库。你可能会跟我有一样的疑问,为什么作者不使用已有的成熟的相关库,比如 Libevent 或 Libev?作者是这样跟别人讨论的,感兴趣的可以了解下。下面从源码入手介绍下 Redis...
Nginx 是如何解决惊群效应的?
前置知识linux 网络处理的基本方法:bind、listen、acceptepoll 的基本方法:epoll_create、epoll_ctl、epoll_wait什么是惊群效应?第一次听到的这个名词的时候觉得很是有趣,不知道是个什么意思,总觉得又是奇怪的中文翻译导致的。复杂的说(来源于网络)TLDR;惊群效应(thundering herd)是指多进程(多线程)在同时阻...
2023-09-12
PHP socket初探 --- 颤颤抖抖开篇libevent(一)
正如标题所言,颤颤抖抖开篇epoll。颤颤抖抖的原因大概也就是以前几乎没有亲自“手刃”epoll的经验,仅仅靠epoll的理论知识骗吃骗喝骗人事哄小孩儿装高手,现如今,没有了大师兄的铁头功照顾,没有了六师弟的轻功水上漂背,没有了阿梅的太极功护身,不得不自己个儿当一次排头兵了。
nosql-redis-网络资料学习-09-redis相关知识
备注:epoll是Linux内核为处理大批量文件描述符而作了改进的epoll,是Linux下多路复用IO接口select/poll的增强版本,它能显著提高程序在大量并发连接中只有少量活跃的情况下的系统CPU利用率。
2018-10-29
对上一篇文章中tcp问题的进一步思考
上篇文章 一个有关tcp的非常有意思的问题 中我们讲到,在tcp建立连接后,如果一端关闭了连接,另一端的第一次write还是可以写成功的,文章中也分析了造成这种现象的具体原因。
2019-08-07
彻底搞懂IO多路复用
上一篇文章以近乎啰嗦的方式详细描述了BIO与非阻塞IO的各种细节。如果各位还没有读过这篇文章,强烈建议先阅读一下,然后再来看本篇,因为逻辑关系是层层递进的。
epoll惊群效应深度剖析
前情提要我们一个基于Nginx+uWSGI+python的服务最近在高峰期经常会遇到负载高导致一些请求报错的情况,在单机qps只有差不多2000-3000左右的时候内核的cpu占用竟然高达超过20%,内核每秒上下文切换超过200w次,分析之后发现是nginx+uwsgi引发了惊群效应,导致性能急剧下降,通过上锁解决惊群问题之后服务恢复。基于这个排...
IO模型介绍(select、poll、epoll)
我们如果需要对磁盘进行读取或者写入数据的时候必须得有主体去操作,这个主体就是应用程序。 应用程序是不能直接进行一些读写操作(IO)的,因为用户可能会利用此程序直接或者间接的对计算机造成破坏,只能交给底层软件—操作系统.也就是说应用程序想要对磁盘进行读取或者写入数据,只能通过操作系统对上层开放的API来进行。在...
2024-03-28
用IO多路复用实现 nginx 静态资源代理(C/Java/Golang)
用IO多路复用实现 nginx 静态资源代理(C/Java/Golang)效果展示代理 HTML代理图片注意, 静态资源代理基于 HTTP, 可以了解上一篇文章: 几十行代码使用TCP简单实现HTTP(C/Golang/Java) [链接]Java {代码...} Java IO多路复用 {代码...} 使用前记得修改代理的路径 basePath 为你的静态资源地址完整代码仓库 [链接]C {代码......
2022-09-30
快来体验快速通道,netty中epoll传输协议详解
在前面的章节中,我们讲解了kqueue的使用和原理,接下来我们再看一下epoll的使用。两者都是更加高级的IO方式,都需要借助native的方法实现,不同的是Kqueue用在mac系统中,而epoll用在liunx系统中。
2022-07-14
nginx高并发配置优化
2 cpu {代码...} accept_mutex配置参数可以根据实际情况设置,个人建议默认on
2020-05-07
Redis 事件机制详解
Redis 采用事件驱动机制来处理大量的网络IO。它并没有使用 libevent 或者 libev 这样的成熟开源方案,而是自己实现一个非常简洁的事件驱动库 ae_event。
libevent的事件机制
从上一篇文章《libevent是怎么选择底层实现的》可以看出来,调用event_base_new()函数就是初始化好底层实现,给event_base结构体中evsel赋值,evsel是一个eventop结构体,我们再来看下:
2019-08-07
走进 mTCP
互联网的发展,使得用户对网络应用的性能需求越来越高。人们不断挖掘CPU处理能力加强,添加核的数量,但这并没有使得网络设备的吞吐率线性增加,其中一个原因是内核协议栈成为了限制网络性能提升的瓶颈。