• 主页
  • 归档
  • 文集
  • 搜索
  • [stl 源码分析] 移动语义是如何影响程序性能的(C++11)

    2022-04-08
    c/c++

    移动语义,只是 C++11 提供的一种对象转移方法,程序可以通过移动语义的实现去降低对象转移成本,提高程序性能。

    本文将结合测试例子走读 std::string 和 std::vector 对应源码,看看程序是如何通过移动语义方法去避免数据拷贝,提高程序性能的。

    右值引用,移动语义,等详细知识可以参考:《Effective Modern C++》– 第五章

    Read All

  • MacOS 安装使用 Docker

    2022-04-06
    tool

    只要开着 VMware 虚拟机,笔记本风扇经常响,尝试通过 Docker 跑比较干净的程序,看看问题是否能得到改善。

    Read All

  • [stl 源码分析] std::sort

    2022-02-23
    c/c++

    std::sort 是标准库里比较经典的算法,它是一个复合排序,结合了几种算法的优点。

    Read All

  • (ubuntu) vscode + gdb 调试 c++

    2022-02-19
    c/c++

    vscode + gdb 简单调试 ubuntu 上的 c/c++ stl 源码。

    Read All

  • 延时双删(redis-mysql)数据一致性思考

    2022-02-14
    redis

    延时双删 策略是分布式系统中存储和缓存数据保持一致性的常用策略,但它不是强一致。

    这里思考和分析一下它的工作原理。

    Read All

  • [内核源码] tcp 连接队列

    2022-01-22
    kernel

    服务端与客户端是一对多的关系,tcp 服务,当大量用户通过三次握手涌入服务端时,连接优化处理就非常重要。

    服务端优化的方向有几个:全连接长度,半连接长度,syncookies 配置。

    本文通过走读 Linux(5.0.1) 内核源码,了解对应的知识点。

    待续 …..

    Read All

  • [内核源码] Linux 网络数据接收流程(TCP)- NAPI

    2021-12-29
    kernel

    走读 Linux(5.0.1)源码,理解 TCP 网络数据接收和读取工作流程(NAPI)。

    要搞清楚数据的接收和读取流程,需要梳理这几个角色之间的关系:网卡(本文:e1000),主存,CPU,网卡驱动,内核,应用程序。

    Read All

  • tcp + epoll 内核睡眠唤醒工作流程

    2021-12-16
    kernel

    本章整理了一下服务端 tcp 的第三次握手和 epoll 内核的等待唤醒工作流程。

    Read All

  • 学习 linux 内核一阶段小结

    2021-12-16
    kernel

    做服务端多年,但是学习 linux 内核才一年多,深入研究源码后,解决了我之前的很多疑惑。

    前段时间在回答知乎问题时,顺便做了个小结,现在把自己的回答整理了一下搬到这里。

    学习流程:熟练使用应用层接口 -> 理解工作原理 -> 搭建内核调试环境 -> 画图串联知识点 -> 解决问题。

    Read All

  • 搭建 Linux 内核网络调试环境(vscode + gdb + qemu)

    2021-12-03
    kernel

    如题,主要搭建 linux 内核的调试环境。

    qemu 模拟器运行 linux,然后通过 gdb 调试 linux 内核源码。

    前段时间曾出过两个视频,比较粗糙,最近重新整理了一下环境搭建流程,还加入了网桥搭建流程,可以调试 linux 内核虚拟网卡的驱动部分源码。

    Read All

  • [知乎回答] socket的任意event都会导致epoll_wait的惊群效应吗?

    2021-11-22
    知乎  kernel  epoll

    知乎问题:

    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的开发场景?

    Read All

  • [知乎回答] Nginx为啥使用ET模式Epoll?

    2021-11-21
    知乎  nginx  kernel  epoll

    知乎问题:

    Web服务器nginx使用ET模式的epoll。我想问,它相对LT模式epoll有哪些优势呢?另外一篇帖子(epoll的边沿触发模式(ET)真的比水平触发模式(LT)快吗?(当然LT模式也使用非阻塞IO,重点是要求ET模式下的代码不能造成饥饿))说ET不一定比LT快,那么为什么要使用ET模式呢?

    Read All

  • [知乎回答] epoll的EPOLLEXCLUSIVE真的能防住惊群吗?

    2021-11-20
    知乎  nginx  epoll

    知乎问题:

    看网上的说法,在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。

    这样的话,岂不还是惊群?小白求解答

    我看的代码: https://code.woboq.org/linux/li

    Read All

  • [知乎回答] 协程如何做到切换到另一个函数还能完成原函数的IO?

    2021-11-18
    知乎  libco

    知乎问题:

    协程的一个典型应用是:单线程上开启多协程去执行某个既包含cpu运算、又包含io操作的函数。在开始执行io操作之后切换到另一个函数上执行cpu运算,在上一个函数的io操作结束后再切换回来。

    不太懂程序语言如何设计可以达到这一点?

    能否以c/c++/java/python举例来说明?

    Read All

  • [知乎回答] 程序员都是怎么记笔记的?

    2021-11-17
    知乎  随笔

    知乎问题:

    程序员编码过程中总会碰到很多 bug,这些 bug 都应该算是我们的一种阅历,非常想把这些犯过的错误记录下来,所以说大家都是用什么来做 bug 笔记的呢?

    现在个人在用 Evernote 做一些记录,但是碰到了一下问题:

    1. Evernote 没有好的代码编辑器。
    2. 公司有安全的考虑,不建议用外部软件记录业务数据。
    3. 还没设计出好的规则来进行管理。
    Read All

1/13
我的链接
  • Github
  • Processon
  • Bilibili
文集
  • 技术 5
  • c/c++ 27
  • tool 18
  • redis 40
  • hiredis 4
  • golang 5
  • 科技 4
  • system 11
  • 即时通讯 4
  • zookeeper 4
  • mysql 3
  • algorithm 4
  • 随笔 8
  • nginx 9
  • epoll 10
  • network 9
  • kernel 28
  • kimserver 9
  • libco 11
  • co_kimserver 2
  • 知乎 9
归档
  • 2022 (6)
  • 2021 (59)
  • 2020 (95)
  • 2019 (18)
  • 2018 (8)
  • 2017 (3)
  • 2016 (1)

Contact me at:

粤ICP备20011260号