摘要: muduo库中高效的异步日志实现主要是用了多缓冲的思想 1.在生产者端: 在构造函数的时候添加了两个变量,分别表示现在的缓冲区和下一个备用的缓冲区 在生产者多线程写的时候,先锁住,然后往现在的缓冲区内写,如果缓冲区满,那么将该缓冲区加到buffers中(buffers用来当中间队列的) 然后把备用的 阅读全文
posted @ 2021-06-26 22:57 小码农2 阅读(225) 评论(0) 推荐(0)
摘要: 1 #include <iostream> 2 #include <string> 3 #include <unordered_map> 4 using namespace std; 5 6 int main() 7 { 8 unordered_map<int , string> ump; 9 fo 阅读全文
posted @ 2021-06-20 18:53 小码农2 阅读(1324) 评论(0) 推荐(0)
摘要: 重点好文 https://zhuanlan.zhihu.com/p/149581303 https://mp.weixin.qq.com/s?__biz=MzU0MzQ5MDA0Mw%3D%3D&chksm=fb080abfcc7f83a9f1f2ccb02c79a00a38e9c2eadf8ea7 阅读全文
posted @ 2021-05-28 15:38 小码农2 阅读(61) 评论(0) 推荐(0)
摘要: 读文件 1、进程调用库函数向内核发起读文件请求; 2、内核通过检查进程的文件描述符定位到虚拟文件系统的已打开文件列表表项; 3、调用该文件可用的系统调用函数read() 3、read()函数通过文件表项链接到目录项模块,根据传入的文件路径,在目录项模块中检索,找到该文件的inode; 4、在inod 阅读全文
posted @ 2021-05-27 21:39 小码农2 阅读(348) 评论(0) 推荐(0)
摘要: likely()与unlikely()在2.6内核中,随处可见,那为什么要用它们?它们之间有什么区别呢?首先明确:if (likely(value))等价于if (value)if (unlikely(value))等价于if (value) 也就是说likely()和unlikely()从阅读和理 阅读全文
posted @ 2021-05-24 21:02 小码农2 阅读(164) 评论(0) 推荐(0)
摘要: 阅读全文
posted @ 2021-05-19 10:51 小码农2 阅读(27) 评论(0) 推荐(0)
摘要: #include <thread> 2 #include <iostream> 3 #include <mutex> 4 using namespace std; 5 mutex _mutex1; 6 mutex _mutex2; 7 int date1; 8 int date2; 9 int do 阅读全文
posted @ 2021-05-14 21:25 小码农2 阅读(973) 评论(0) 推荐(0)
摘要: 进程池的基本思想 由主进程管理所有监听socket,而各个子进程分别管理属于自己的连接的socket,子进程可以自己调用accept来接受新连接,这样父进程就无需向子进程传递socket,而只需要简单的说一声."我检测到了有新的连接,你来接受一下“ 进程池的代码逻辑 每个进程类都有一个m_pid用来 阅读全文
posted @ 2021-05-13 12:18 小码农2 阅读(99) 评论(0) 推荐(0)
摘要: 任何一条指令在CPU中的执行都必须经历如下这些步骤: 取指(Fetch):取指阶段从存储器读取指令字节,地址为程序计数器(PC)的值。 译码(Decode):译码阶段完成指令的翻译,从寄存器文件读入最多两个操作数。 执行(Execute):执行指令,如果是执行的是一条跳转指令的话,这个阶段会检查条件 阅读全文
posted @ 2021-05-06 15:28 小码农2 阅读(580) 评论(0) 推荐(1)
摘要: 1.内核为每个进程给了两个位图,一个为mask(默认为1),一个为pending(默认为0) 2.当内核态转到用户态时,检测是否有信号,用mask & pending得到结果,如果没有接到信号,那么结果为32位的0,此时通过内核中保存的地址返回原进程。 3.当有一个信号来时,pending中对应位置 阅读全文
posted @ 2021-04-21 23:29 小码农2 阅读(300) 评论(0) 推荐(0)