原创 分享技術,交流技術

歡迎關注我的公衆號,分享技術,交流技術 ​​​​

原创 理解進程間通信

進程是一個實體,兩個實體間的通信就需要介質。使用不同的介質,就對應了不同的通信方式。進程的通信方式分爲兩種,同主機和不同主機。下面我們來逐個分析。 1 匿名管道 匿名管道是進程間通信中比較簡單的一種,他只用於有繼承關係的進程,因爲

原创 理解epoll(上)(基於linux2.6.12.1)

epoll在現在的軟件中佔據了很大的分量,nginx,libuv等單線程事件循環的軟件都使用了epoll。之前分析過select,今天分析一下epoll。 們按照epoll三部曲的順序進行分析。 epoll_create asml

原创 讀取一個文件的時候,操作系統發生了什麼

今天分享一下讀取文件的過程。linux萬物皆文件,任意文件的操作,都是通過統一的函數開始,所以我們就從read函數,分析針對一般文件的讀取過程。 int sys_read(unsigned int fd,char * buf,in

原创 js實現無限操作

function add(x, y) { if (isNaN(+x)) { x = 0; } if (isNaN(+y)) { y = 0; } return x + y; } var operator = (

原创 理解SIGALRM信號

SIGALRM信號是操作系統中的其中一個信號。他的作用是設置進程隔多久後會收到一個SIGALRM信號。下面我們看一下他的實現原理。     alarm系統調用是設置多久觸發SIGALRM信號的函數。下面是他的聲明。 #includ

原创 nginx的timeout(基於nginx1.17.9)

nginx中使用timeout的地方非常多,本文主要分析客戶端和nginx通信時涉及到的幾個timeout。 連接建立成功,接收業務數據超時 接收http報文的超時 1 連接建立成功,接收業務數據超時 這個邏輯從ngx_eve

原创 ngx_http_auth_basic_module源碼解析(基於nginx1.17.9)

auth_basic模塊是nginx中比較簡單的模塊。地址在http://nginx.org/en/docs/http/ngx_http_auth_basic_module.html。我們通過分析這個模塊的代碼,不僅知道如何使用,

原创 通過源碼理解http層和tcp層的keep-alive

很久沒更新文章了,今天突然想到這個問題,打算深入理解一下。我們知道建立tcp連接的代價是比較昂貴的,三次握手,慢開始,或者建立一個連接只爲了傳少量數據。這時候如果能保存連接,那會大大提高效率。下面我們通過源碼來看看keep-ali

原创 Libuv源碼分析v0.0.1.pdf

github:https://github.com/theanarkh/read-libuv-code 下載:https://11111-1252105172.cos.ap-shanghai.myqcloud.com/Libuv%

原创 理解nodejs插件的加載原理並使用n-api編寫你的第一個nodejs插件

nodejs拓展本質是一個動態鏈接庫,寫完編譯後,生成一個.node文件。我們在nodejs裏直接require使用,nodejs會爲我們處理這一切。下面我們按照文檔寫一個拓展並通過nodejs14源碼瞭解他的原理(ubuntu1

原创 拓展nodejs內核

拓展nodejs的方式有很多種,可以寫npm包,可以寫c++插件,還可以修改內核重新編譯分發。本文介紹如何通過爲nodejs內核增加一個c++模塊的方式拓展nodejs的功能(git地址:https://github.com/th

原创 redis0.1源碼解析之基本原理

本文分析redis的基礎原理,暫不做深入分析,後續再詳細分析。我們從main函數開始。 int main(int argc, char **argv) { initServerConfig(); initServ

原创 redis0.1源碼解析之內存分配

這是redis源碼分析的第一篇,選取早期版本,一睹redis的基礎原理。這篇分析內存分配。 redis內存管理是對malloc系列函數做了封裝。額外記錄了申請的內存大小信息。 #include <stdlib.h> #inclu

原创 redis0.1源碼解析之事件驅動

redis的事件驅動模塊負責處理文件和定時器兩種任務。 下面是幾個函數指針 typedef void aeFileProc(struct aeEventLoop *eventLoop, int fd, void *clientDa