
linux
sai_j
这个作者很懒,什么都没留下…
展开
-
bprc-bthread梳理
BRPC是baidu内部自研的一套RPC框架,除了易用性、高性能之外,核心的一个亮点就是当中完整实现了一套M->N的Green Threading(类似Golang的Goroutine)。1)BRPC在公司内部大量使用,每天的工作基本上都绕着brpc转也不为过;2)因为自己最早是写C出身的,自然对Golang喜欢的不行,Goroutine也用得不要太开心,但是一直没有对Goroutine的原理进行学习。借此机会,希望通过对bthread的梳理,能管中窥豹M->N Green Threadi原创 2020-10-01 13:09:14 · 603 阅读 · 0 评论 -
[Golang] timer可能造成的内存泄漏
背景前两天,跟一位学长交流Golang;然后,他突然问我:你知道timer可能造成内存泄漏嘛? 当时,甚是一脸懵逼,毕竟之前写的Agent测了好久,都没发现这个问题啊。今天,就索性了解了下。这里先说下结论,timer的误用可能造成某些等待timer的Goroutine无法正常退出,导致资源无法释放;(ps. 虽然的确算是内存泄漏,但是对于我这种写C出身的人来说,感觉还是怪怪的)接下来进入正题,...原创 2018-09-19 23:33:45 · 5207 阅读 · 0 评论 -
[Linux] Sleep睡眠线程还是进程?
sleep() causes the calling thread to sleep either until the number ofreal-time seconds specified in seconds have elapsed or until a signalarrives which is not ignored.参考文献:http://man7.org/linux/ma...原创 2018-09-19 20:36:59 · 2046 阅读 · 0 评论 -
[Socket] listen()之backlog参数
直奔主题The behavior of the backlog argument on TCP sockets changed with Linux 2.2.Now it specifies the queue length for completely established sockets waiting to beaccepted, instead of the number o...原创 2018-09-25 10:13:37 · 714 阅读 · 0 评论 -
[Linux] 内存映射IO
前言本科留给我最大的印象,就是大一愣头青死磕APUE。一眨眼,研究生阶段都快结束了。时间过的好快。上研究生之后,慢慢从C转到C++,Linux native API也用的越来越少。趁着最近面试这个机会,赶紧复习一下相关概念。内存映射IO 的优势使用内存映射IO来取代read()和write() 能简化代码逻辑,统一以内存的形式进行处理;特定场景下,能提供更好的性能;内存映射IO 为什...原创 2018-09-25 00:19:41 · 590 阅读 · 0 评论 -
[Linux] 文件描述符和打开文件之间的关系
前言文件描述符、文件句柄和i-node之间的关系,应该是Linux Native Programming的基本功。Golang、C++11写久了之后,这些概念有些淡忘,今天顺便梳理下。铺垫为了搞清楚这当中的关系,我们首先要了解内核维护的3个数据结构:进程级的文件描述符表系统级的打开文件句柄文件系统级的i-node表进程级的文件描述符表单条表项,包括:文件描述符标志,如clo...原创 2018-09-23 22:36:13 · 340 阅读 · 0 评论 -
[evpp/muduo/reactor] evpp事件驱动网络库 整体架构梳理 2
序上一篇博文中,我们从用户使用的角度入手,对evpp中TCPServer、TCPClient两大类进行了梳理。接下来,我们再来分析梳理下Listener、Connector两个类的细节。当然,这让我联想起了杨宗纬的那首歌“如果你愿意一层一层一层地剥开我的心,你会发现 你会讶异…”。扯得有点远,让我们进入正题。ListenerListener正如其名,主要是封装和TCPServer ...原创 2018-09-06 17:15:19 · 1383 阅读 · 0 评论 -
[Reactor] 如果不限制并发连接数可能会引发的问题?
对于reactor模式,listening socket是一种特殊的IO对象。当有新连接到来时,此socket变为可读,epoll_wait会返回这一事件,然后在事件处理器中调用accept获得新连接的socket,但是如果本机的file descriptor已经用尽,则accept会返回EMFILE,标志accept调用失败,新连接依旧在listen的连接池中没有取出来。既然没有socket文件...原创 2018-08-31 13:09:03 · 554 阅读 · 0 评论 -
[os] 优先级反转
优先级反转是指一个低优先级的任务持有一个被高优先级任务所需要的共享资源。高优先任务由于因资源缺乏而处于受阻状态,一直等到低优先级任务释放资源为止。而低优先级获得的CPU时间少,如果此时有优先级处于两者之间的任务,并且不需要那个共享资源,则该中优先级的任务反而超过这两个任务而获得CPU时间。如果高优先级等待资源时不是阻塞等待,而是忙循环,则可能永远无法获得资源,因为此时低优先级进程无法与高优先级进程...原创 2018-08-28 00:48:35 · 208 阅读 · 0 评论 -
[C10K] select和poll存在的问题
select和poll存在的问题每次调用select()或poll()时,都涉及两次expensive 用户态–内核态拷贝 调用函数时,需要传递结构体到内核;函数返回时,再次从内核拷贝结构体;对select而言是fd_set,对poll而言则是struct pollfd[ ];对select而言,结构体大小固定;对poll而言,结构体大小随fd个数增多而增加;每次调用select...原创 2018-03-12 20:34:12 · 283 阅读 · 0 评论 -
[C10K] TCP REUSEPORT
概述SO_REUSEPOR这个socket选项可以让你将多个socket绑定在同一个监听端口,然后让内核给你自动做负载均衡,将请求平均地让多个线程进行处理。安全性考虑为了避免hijacking即恶意用户通过监听相同的端口来获取用户信息第一个进程必须enable了这个选项之后,后续的进程才可以通过enable这个选项将socket绑定到同一个端口上;绑定到同一个端口的进程的...转载 2018-03-15 11:20:49 · 414 阅读 · 0 评论 -
[TCP] TCP_NODELAY?
可能很多人都像我一样,很早就听说过TCP_NODELAY这个选项,明白它跟nagle算法相关,但是就只是停留在表面上了。最近,实验室在做一套低时延可靠传输协议。作为对比,我希望搞清楚TCP在实际场景中丢包重传到底要消耗多少时间。为此,通过netem在loopback上模拟丢包和延时,我只需要在send以及recv这两个时刻打时间戳就可以知道每个包大概的时延。以上是背景。然后问题来了。在原创 2017-10-17 23:24:00 · 1801 阅读 · 0 评论