穷则独善其身,达则兼济天下

工匠之心,技术狂热追求者,开源社区爱好者,一个记录成长的站点。

分类 源码阅读 下的文章

Linux内核-内存管理: Out Of Memory Management 源码分析

我们这篇文章中描述了Linux内核对于 Out Of Memory Management 场景下的相关策略,接下来我们将进行Linux 5.0内核的OOM内核源码分析。一. 关键数据结构针对源码部分,我们首先需要阐述oom_kill部分的核心数据结构。文件路径:/linux/include/linux/oom.h1.1 oom_control 结构体首先,我们给出具体的内核定义:/* ...

Linux内核-内存管理: Out Of Memory Management - OOM

一. 引言这篇文章,我们将要讨论的是内存不足(OOM)管理器,OOM检查是否有足够的可用内存来满足系统运行需求,如果没有足够的可用内存则进行进程kill操作。这是Linux内核虚拟内存模块中一个有争议的部分,有人建议在很多情况下删除它。所以在使用OOM的时候,首先需要确认OOM是否在待操作的Linux内核中存在,还需要确定OOM在Linux内核中的开启与关闭选项。二. 检查可用内存(Che...

LibCurl连接复用原理

一. 背景描述Curl是计算机中使用最多的网络请求工具,很多开源项目在内核中对于HTTP、FTP的操作是通过libcurl库获得的技术支持。这篇文章主要调研libcurl库中的TCP连接复用部分。二. 连接池Libcurl针对tcp连接采用了连接池管理,一次传输完成后,它将在“连接池”(有时也称为连接缓存)中保持N个连接处于活动状态,以便恰好能够重用现有连接之一的后续传输可以使用它而不是创建...

Swoole协程版curl源码剖析

Swoole协程版curl源码剖析一. 背景描述2019年6月5日,Swoole作者宣布在4.4版本后开始初步支持协程版本的Curl。我在原来的研究分析中指出PHP内核对于curl部分的支持是建立在libcurl库上,swoole作者也表达因为PHP内核建立在libcurl基础上,造成了swoole无法直接对于libcurl内部的socket操作进行钩子化。那么,最新版的swoole是采用什...

Redis-Server 线程模型源码剖析

Redis-Server 线程模型源码剖析一. 背景描述最近有同事咨询Redis线程模型有关的情况,对于Redis线程模型,网上的说法总体是单线程模型,但是对于内部线程结构的分布及线程的主要作用多数没有涉及。接下来,我们就来好好探索一下Redis的线程模型。二. 环境模拟首先,我们搭建一个Redis-Server并把它运行起来,然后,我们用拦截一下进程的线程列表,效果如下:通过上图,可以看到...

PHP-CURL-Guzzle-HTTP-连接复用内核原理

PHP-CURL连接复用内核原理0.写在前面PHP是一个时代的产物,它的底层支持是C语言,因此它在CPU密集型计算或者系统内核调用上有天生的优势,Zend引擎把PHP执行生命期分成了五个阶段1,这五个阶段并不是全部都能常驻进程,这种模式下,对于很多使用场景会造成不好的影响,比如网络IO.对于网络IO中的HTTP请求 , 很多工程师使用 php-curl 系列函数 . 所以这篇文章将从内核角度...

开源: IO读取缓冲器-BufReader

一. IO问题思考IO读取缓冲器,顾名思义就是针对系统的IO读取操作添加一层缓冲层,有这层缓冲层到底有啥好处呢?针对这个问题,我先问大家以下几个问题.对于IO读取操作,无论针对的是对象,还是针对网络,每次IO操作均需要陷入内核调用,频繁内核调用会严重影响性能,请问有没有什么办法优化这部分?针对网络IO读取过程,网络时好时坏,如何让网络IO能够发挥最大的性能潜力,在网络好的时候抓紧多读,在网络...

开源: 高性能网络监听库-NetHandle

NetHandle这是一个库,方便构建高性能TCP服务端应用程序,站在Go语言的巨人肩膀上项目地址: https://github.com/gitsrc/NetHandle一. 特点高性能,低资源消耗非常简单易用的开发接口支持众多协议,TCP,UDP,UNIX二. 安装go get -u github.com/gitsrc/NetHandle三. 性能测试:3.1 50*10000 (50...