用户7686797

LV0
发表了文章

关于关闭一个还有没发送数据完的TCP连接思考

当 close 一个 TCP 连接时,如果还有没发送完的数据在缓冲区中,内核会怎么处理?

用户7686797
发表了文章

Linux 直接I/O 原理与实现

一般来说,当调用 open() 系统调用打开文件时,如果不指定 O_DIRECT 标志,那么就是使用缓存I/O来对文件进行读写操作。我们先来看看 open() ...

用户7686797
发表了文章

自己动手写一个 strace

用过 strace 的同学都知道,strace 是用来跟踪进程调用的 系统调用,还可以统计进程对 系统调用 的统计等。strace 的使用方式有两种,如下:

用户7686797
发表了文章

Linux文件系统之 — 通用块处理层

由于不同块设备(如磁盘,机械硬盘等)有着不同的设备驱动程序,为了让文件系统有统一的读写块设备接口,Linux实现了一个 通用块层。如下图中的红色部分:

用户7686797
发表了文章

Linux系统调用原理

系统调用 跟用户自定义函数一样也是一个函数,不同的是 系统调用 运行在内核态,而用户自定义函数运行在用户态。由于某些指令(如设置时钟、关闭/打开中断和I/O操作...

用户7686797
发表了文章

GDB原理之ptrace实现原理

在程序出现bug的时候,最好的解决办法就是通过 GDB 调试程序,然后找到程序出现问题的地方。比如程序出现 段错误(内存地址不合法)时,就可以通过 GDB 找到...

用户7686797
发表了文章

vmalloc原理与实现

在 Linux 系统中的每个进程都有独立 4GB 内存空间,而 Linux 把这 4GB 内存空间划分为用户内存空间(0 ~ 3GB)和内核内存空间(3GB ~...

用户7686797
发表了文章

Linux进程详解

程序是指储存在外部存储(如硬盘)的一个可执行文件, 而进程是指处于执行期间的程序, 进程包括 代码段(text section) 和 数据段(data sect...

用户7686797
发表了文章

C模块化编程

模块化编程 是指程序核心部分定义好功能的接口,而具体的实现留给各个模块去做。举个现实世界的例子:我们可以在电脑的PCI插槽上安装显卡、声卡或者网卡,原因就是这些...

用户7686797
发表了文章

HTTP协议详解

本书是介绍怎么编写一个Web服务器,而Web服务器是基于HTTP(HyperText Transfer Protocol)协议实现的,所以要实现一个Web服务器...

用户7686797
发表了文章

epoll原理简介

使用epoll时需要使用epoll_create()创建一个epoll的文件句柄,epoll_create()函数的原型如下:

用户7686797
发表了文章

Nginx线程池浅析

Nginx通过使用多路复用IO(如Linux的epoll、FreeBSD的kqueue等)技术很好的解决了c10k问题,但前提是Nginx的请求不能有阻塞操作,...

用户7686797
发表了文章

谈谈协程

协程被称为“轻量级线程”或者“用户态线程”。最近协程在高并发编程领域大放异彩,如Golang天生就支持协程,Lua和Python也支持协程。但其实协程并不是最近...

用户7686797
发表了文章

唯一ID生成原理与PHP实现

虽然PHP提供了一个生成唯一ID的函数uniqid(),但这个函数真的可以生成唯一ID吗?我们来看看uniqid()的具体实现:

用户7686797
发表了文章

Redis Sentinel原理与实现 (下)

监控到有Redis主服务器宕机, Sentinel就开始进行故障转移。故障转移的目的是把有问题的主服务器摘掉,然后选择一台从服务器提升为主服务器。因为在主从架构...

用户7686797
发表了文章

Redis Sentinel原理与实现 (中)

在启动Redis时可以传入“--sentinel”参数来启动Sentinel,在main()函数中可以看到处理Sentinel的逻辑,如下:

用户7686797
发表了文章

Redis Sentinel原理与实现 (上)

Sentinel(哨兵)是Redis 2.8版本发布的一个功能,使用Sentinel可以实现高可用的Redis集群服务。Sentinel的作用是实时监控Redi...

用户7686797
发表了文章

Linux内存管理 - slab分配器

Linux内存管理是一个非常复杂的子系统,要完全说清的话估计要一本书的篇幅。但Linux内存管理可以划分成多个部分来阐述,这篇文章主要介绍slab算法。

用户7686797
发表了文章

Golang实现守护进程

因为Golang没有Linux的fork()系统调用, 所以实现守护进程要使用一些小技巧. Golang为*nix(unix/linux/FreeBSD...)...

用户7686797
发表了文章

Linux信号处理

目前 Linux 支持64种信号。信号分为非实时信号(不可靠信号)和实时信号(可靠信号)两种类型,对应于 Linux 的信号值为 1-31 和 34-64。

用户7686797

个人简介

个人成就

扫码关注云+社区

领取腾讯云代金券