知乎问题:
生产环境有什么推荐的线程池库吗?…
最近翻阅侯捷先生的两本书:(翻译)《深度探索 C++ 对象模型》 和 《C++ 虚拟与多态》,获益良多。
要理解多态的工作原理,得理解这几个知识点的关系:虚函数
、虚函数表
、虚函数指针
、以及对象的 内存布局
。
本文将会结合测试例子走读 std::string
和 std::vector
源码,观察 C++11 移动语义
是如何影响程序性能的。
只要开着 VMware 虚拟机,笔记本风扇经常响,尝试通过 Docker 跑比较干净的程序,看看问题是否能得到改善。
std::sort 是标准库里比较经典的算法,它是一个复合排序,结合了几种算法的优点。
vscode + gdb 简单调试 ubuntu 上的 c/c++ stl 源码。
延时双删
策略是分布式系统中存储和缓存数据保持一致性的常用策略,但它不是强一致。
这里思考和分析一下它的工作原理。
服务端与客户端是一对多的关系,tcp 服务,当大量用户通过三次握手涌入服务端时,连接优化处理就非常重要。
服务端优化的方向有几个:全连接长度,半连接长度,syncookies 配置。
本文通过走读 Linux(5.0.1) 内核源码,了解对应的知识点。
待续
…..
走读 Linux(5.0.1)源码,理解 TCP 网络数据接收和读取工作流程(NAPI)。
要搞清楚数据的接收和读取流程,需要梳理这几个角色之间的关系:网卡(本文:e1000),主存,CPU,网卡驱动,内核,应用程序。
本章整理了一下服务端 tcp 的第三次握手和 epoll 内核的等待唤醒工作流程。
做服务端多年,但是学习 linux 内核才一年多,深入研究源码后,解决了我之前的很多疑惑。
前段时间在回答知乎问题时,顺便做了个小结,现在把自己的回答整理了一下搬到这里。
学习流程:熟练使用应用层接口 -> 理解工作原理 -> 搭建内核调试环境 -> 画图串联知识点 -> 解决问题。
如题,主要搭建 linux 内核的调试环境。
qemu 模拟器运行 linux,然后通过 gdb 调试 linux 内核源码。
前段时间曾出过两个视频,比较粗糙,最近重新整理了一下环境搭建流程,还加入了网桥搭建流程,可以调试 linux 内核虚拟网卡的驱动部分源码。
知乎问题:
1.网上针对epoll_wait的惊群讨论几乎都是围绕listen socket的accpet来做讨论的,socket是否只有此种情况会导致惊群? 将accpet返回的socket加入到epoll中,这个socket的可读,可写事件是否也会导致惊群?
2.如果1中描述的accept返回的socket的可读,可写事件不会导致惊群。那么是否可以采用 ①一个listen socket加入到一个epoll(1)中,并且自始至终只用一个线程(1)来调用epollwait和accpet;② accpet返回的所有套接字都加入到另外一个epoll(2)中,然后线程2-N同时针对第2个epoll调用epoll_wait 的方式来应对连接数多但不是同时connect的开发场景?
知乎问题:
Web服务器nginx使用ET模式的epoll。我想问,它相对LT模式epoll有哪些优势呢?另外一篇帖子(epoll的边沿触发模式(ET)真的比水平触发模式(LT)快吗?(当然LT模式也使用非阻塞IO,重点是要求ET模式下的代码不能造成饥饿))说ET不一定比LT快,那么为什么要使用ET模式呢?
知乎问题:
看网上的说法,在LT模式+EPOLLEXCLUSIVE的情况下,当有新事件发生的时候,线程被唤醒,之后会调用ep_scan_ready_list,主要做两个事情:
调用传入的回调参数ep_send_events_proc把确实可读/写的事件从ready list挪到用户空间,如果是LT模式,那么会把事件留在ready list中 如果发现ready list没有为空的话,那么wake_up一下epoll中的等待队列,在EPOLLEXCLUSIVE情况下是唤醒一个,否则全部唤醒 如果我上面说的大概没错。。。我的问题是,假设LT+EPOLLEXCLUSIVE前提下,3个线程都在epoll_wait等一个fd,现在fd出现可写事件,线程A被唤醒,线程A从epoll_wait返回的路上会按照上文所说的情况,再次唤醒一个线程。这样线程B也被唤醒,同理线程B从epoll_wait返回的路上还会唤醒线程C。
这样的话,岂不还是惊群?小白求解答