摘要:
重点 SDS结构体组成:struct sdshdr { int len; int free; char buf[]; }; SDS相比普通字符串的好处: 常数时间获得字符串长度 防止缓冲区溢出:因为记录了长度,所以不会出现溢出的问题 效率提升: 空间预分配:在对空间拓展的时候,如果空间不够,而且当前 阅读全文
摘要:
INADDR_ANY 转换过来就是0.0.0.0,泛指本机的意思,也就是表示本机的所有IP,因为有些机子不止一块网卡,多网卡的情况下,这个就表示所有网卡ip地址的意思。 比如一台电脑有3块网卡,分别连接三个网络,那么这台电脑就有3个ip地址了,如果某个应用程序需要监听某个端口,那他要监听哪个网卡地址 阅读全文
摘要:
https://www.jianshu.com/p/ccafdeda0b95 https://blog.csdn.net/lclwjl/article/details/80154565 阅读全文
摘要:
线程池 线程池是由服务器预先创建好的一组子线程,线程池的线程数目应该和cpu数目差不多,线程中所有子线程都运行着相同的代码,当有新任务来临时,主线程通过某种方式选择线程池的某一个线程来为之服务下,相比于动态的创建子线程,选择一个已经存在的子线程代价要小得多,至于主线程要选择哪个子线程来为新任务服务, 阅读全文
摘要:
虽然服务器程序种类繁多,但其基本框架都一样,不同之处在于逻辑处理 模块 功能 I/O 处理单元 处理客户连接,读写网络数据 逻辑单元 业务进程或线程 网络存储单元 数据库、文件或缓存 请求队列 各单元之间的通信方式 IO处理单元:主要是服务器管理客户链接的模块,它通常完成以下工作:等待并接受新的客户 阅读全文
摘要:
阻塞非阻塞、同步异步IO 典型的一次IO的两个阶段是什么:数据准备和数据读写 数据准备:根据系统IO的就绪状态 阻塞 非阻塞 数据读写:根据应用程序和内核的交互方式 同步 异步 陈硕:在处理 IO 的时候,阻塞和非阻塞都是同步 IO,只有使用了特殊的 API 才是异步 IO。 一个典型的网络IO接口 阅读全文
摘要:
I/O多路复用(I/O多路转接) I/O 多路复用使得程序能同时监听多个文件描述符,能够提高程序的性能,Linux 下实现 I/O 多路复用的 系统调用主要有 select、poll 和 epoll。 SELECT 首先要构造一个关于文件描述符的列表,将要监听的文件描述符加入到该列表中。 2.调用一 阅读全文
摘要:
Makefile 文件命名和规则 文件命名:一个Makefile可以有一个或者多个规则 目标... :依赖 ... 命令 (shell命令) 目标:最终要生成的文件 依赖:生成目标所需要的文件或者是目标 命令:通过执行命令对依赖操作生成目标(命令前必须 Tab 缩进) Makefile 中的其它规则 阅读全文
摘要:
GCC和G++的不同 后缀为.c的,GCC把它当作C程序;G把它当作c程序 后缀为.cpp的,两者都会把他认为是c++程序 编译阶段G会调用GCC,对于 C 代码,两者是等价的,但是因为 gcc 命令不能自动和 C++ 程序使用的库联接,所以通常用G来完成链接,但是也可以使用 gcc -lstdc。 阅读全文
摘要:
虚拟内存是什么 我们现在的操作系统支持虚拟内存,当一个程序开始运行的时候,实际上是为每个程序单独建立了一个页表,只把一部分放入内存中,以后根据实际的需求随时从硬盘中调入内容,虚拟内存还提供了一个保护,这样的话其他的进程就不会损坏系统的内存空间。 物理和虚拟寻址 虚拟内存主要是一种地址扩展技术,主要是 阅读全文