redis 使用到的位域 今天在看redis源码的时候在3.0版本的redis.h 文件中发现了这样的几行代码,看了有趣,研究了一番,才发现这个东西就是c语言中的位域。 /* * redisObject Redis对象 */ typedef struct redisObject { unsigned type : 4; // 类型 unsigned encoding : 4; //... 作者:Holy_666 发表于 2019/01/20 21:32:19 原文链接 https://blog.csdn.net/Holy_666/article/details/86566590 阅读:72 继续阅读 >>


刘嘉辉 19/01/20 21:32:19
触发connect超时事件 有关于如何触发connect超时事件,之前相当然的认为在服务器程序accpet函数前阻塞一段事件就好了,这个思路是完全错误的! 这是我犯了的一个错误,没有严格的验证自己的程序就将其发布了出来,被小组的小伙伴提问时才发现了这个问题,在这里深表歉意!!!同时也非常感谢我的哪位小伙伴!下边是那篇文章,现已更正。 高性能定时器(一) 代码还是以前的代码 #include &... 作者:Holy_666 发表于 2019/01/18 22:51:24 原文链接 https://blog.csdn.net/Holy_666/article/details/86547608 阅读:33 继续阅读 >>


刘嘉辉 19/01/18 22:51:24
彻底理解mmap() 最近起的标题总是这么标题党! 什么是 mmap() mmap, 从函数名就可以看出来这是memory map, 即地址的映射, 是一种内存映射文件的方法, (其他的还有mmap()系统调用,Posix共享内存,以及系统V共享内存,这些我们有机会在后续的文章讨论,今天的男主角是mmap),将一个文件或者其它对象映射到进程的地址空间,实现文件磁盘地址和进程虚拟地址空间中一段虚拟... 作者:Holy_666 发表于 2019/01/17 22:51:27 原文链接 https://blog.csdn.net/Holy_666/article/details/86532671 阅读:135 继续阅读 >>


刘嘉辉 19/01/17 22:51:27
进程池 进程池的使用场景 当我们需要并行的处理大规模任务的时候,需要使用到多进程,多线程技术,比如说服务器处理大量客户端的任务,我在大一的时候写过一个C/S+mysql架构的聊天室,大概是这样处理的,每当有客户端发出连接请求时,服务器accept成功以后就去fork一个进程去处理关于这个客户端的所有请求,经过后来的一系列的学习,这显然是极其不科学的,狂开进程浪费资源且不说,效率也极低。 动态创建... 作者:Holy_666 发表于 2019/01/03 10:46:49 原文链接 https://blog.csdn.net/Holy_666/article/details/85681383 阅读:34 继续阅读 >>


刘嘉辉 19/01/03 10:46:49
彻底理解fork之写时复制<一> 一直以来都对操作系统都比较感兴趣,这篇文章呢就主要研究一下当我们调用fork系统掉用所用到的写时复制技术(copy-on-write)。 下图是fork系列函数的调用过程 <摘自网络 侵删> 写时复制,其实在很多地方都会用到,我们先来看看关于字符串使用写时复制的例子吧。 写时拷贝故名思意:是在写的时候(即改变字符串的时候)才会真正的开辟... 作者:Holy_666 发表于 2018/12/29 11:31:33 原文链接 https://blog.csdn.net/Holy_666/article/details/85336387 阅读:92 继续阅读 >>


刘嘉辉 18/12/29 11:31:33
高性能定时器(一) 先来三句口号 我们通常所说的定时器是定时器容器,是容器类数据结构。 定时器是容器内容纳的一个对象,是对定时器的封装。 我们通常所说的定时器是定时器容器,是容器类数据结构。 定时器是容器内容纳的一个对象,是对定时器的封装。 我们通常所说的定时器是定时器容器,是容器类数据结构。 定时器是容器内容纳的一个对象,是对定时器的封装。 前几日学习了一下定时器 首先吐槽一下,最近学的东西... 作者:Holy_666 发表于 2018/12/26 23:03:01 原文链接 https://blog.csdn.net/Holy_666/article/details/85270319 阅读:56 继续阅读 >>


刘嘉辉 18/12/26 23:03:01
统一事件源的实现 我们在编写高性能服务器的代码时,通常会需要处理很多的信号,如下所示 时间事件 信号 数据读 数据写 网络异常 为了程序的性能,鲁棒以及代码的优化,通常会将所有的这些需要处理的任务包装成事件添加至多路复用函数的事件集中处理。 一般信号处理时会将一些信号屏蔽,为了不屏蔽这些信号太久,同时也不至于主逻辑被冲散,一种解决方案是:信号处理函数只是简单的通知主循环(用于处理I/O事件)并... 作者:Holy_666 发表于 2018/12/18 21:16:11 原文链接 https://blog.csdn.net/Holy_666/article/details/85079895 阅读:38 继续阅读 >>


刘嘉辉 18/12/18 21:16:11
关于用指针交换两个数 西邮Linux 兴趣小组又到了纳新季,作为一个老学长,面试学弟学妹们的时候,必然要然他们感受到小组的关怀(受尽折磨),这一届孩子还是挺强的,但是一到指针上就栽了坑,在加上我们小组的陈年老题swap屡试不爽。所以在这里总结一下关于用一级 二级指针交换两个数字的问题。 一级指针交换 #include<stdio.h> int swap(int *c , int *... 作者:Holy_666 发表于 2018/12/14 12:08:30 原文链接 https://blog.csdn.net/Holy_666/article/details/85001245 阅读:58 继续阅读 >>


刘嘉辉 18/12/14 12:08:30
你写的源代码是如何一步一步变化可执行文件的 昨天看了 <<深入理解计算机系统>> 这本神书 “CSAPP” , 初看第一章漫游部分就让人大乎过瘾,其中提到了如何源代码是如何从文本文件编程可执行的二进制文件,整个章节是从软件以及硬件两个层面分别解析的。那么接下来我先从软件层面来解释一下其中步骤。 正常情况下是这样的 gcc -o hello hello.c 在这里,gc... 作者:Holy_666 发表于 2018/12/12 17:31:14 原文链接 https://blog.csdn.net/Holy_666/article/details/84976549 继续阅读 >>


刘嘉辉 18/12/12 17:31:14
壹、sds (SDS)Simple Dynamic String, 从字面意思上来简单理解就是简单的动态字符,其为具有动态增加空间的能力,扩容不需要使用者担心。 好的咱们来看一下他的数据结构吧 这个版本是黄所注释的3.0版本 typedef char *sds; //注意,sds其实不是一个结构体类型,而是被typedef的char*,好处见下文 struct sdshdr { ... 作者:Holy_666 发表于 2018/12/12 10:44:08 原文链接 https://blog.csdn.net/Holy_666/article/details/84967117 阅读:58 继续阅读 >>


刘嘉辉 18/12/12 10:44:08