TCP服务器通信原理概述,链接:
https://xiaolincoding.com/os/8_network_system/selete_poll_epoll.html#%E6%9C%80%E5%9F%BA%E6%9C%AC%E7%9A%84-socket-%E6%A8%A1%E5%9E%8B

TCP原理:
TCP通信流量控制窗口、拥塞问题:
https://zhuanlan.zhihu.com/p/400788077
开启三次握手、关闭四次握手:
https://blog.csdn.net/qq_43145072/article/details/105565062

关于select,poll,epoll,边缘触发水平触发,阻塞IO、非阻塞IO、IO多路复用链接:
https://zhuanlan.zhihu.com/p/419220389
https://xiaolincoding.com/os/8_network_system/selete_poll_epoll.html#i-o-%E5%A4%9A%E8%B7%AF%E5%A4%8D%E7%94%A8
https://cloud.tencent.com/developer/article/2188691
https://zhuanlan.zhihu.com/p/367591714
https://cloud.tencent.com/developer/article/1005481
https://blog.csdn.net/albertsh/article/details/123958013

webserver同步I/O模拟Proactor模拟的工作流程:
https://www.zhihu.com/question/26943938
https://cloud.tencent.com/developer/article/1488120
https://blog.csdn.net/weixin_41987016/article/details/132701679

端口复用:
https://blog.csdn.net/u012206617/article/details/105851649
listen()函数的第二个参数
https://www.cnblogs.com/love-yh/p/7518552.html
https://blog.csdn.net/u022812849/article/details/109737020

  1. 等待队列:backlog参数决定了等待队列的长度。当队列已满并有新连接请求时,客户端将收到一个错误(通常是ECONNREFUSED)。这意味着即使服务器能够处理大量的并发连接,但如果等待队列太短,可能会在高负载下拒绝新的连接请求。
  2. 处理并发连接:backlog参数只影响正在等待接受的连接数量,与已经建立的连接数量无关。已经建立的连接数量主要受到操作系统的文件描述符限制、服务器硬件资源和应用程序设计的影响。

函数指针:
https://blog.csdn.net/hou09tian/article/details/105288587
https://blog.csdn.net/weixin_42803147/article/details/108021300

read()、write():
https://cloud.tencent.com/developer/article/2091351

信号与槽:

  1. POSIX定时器与信号处理:

基于操作系统的低级机制,直接去调操作系统的接口。
主要用于处理系统级的异步事件。
需要处理线程安全问题。
更复杂,适合需要精细控制的场合。
不确定的触发时机:信号可以在程序的任意时间点触发,取决于外部事件(例如用户按下 Ctrl+C 触发 SIGINT 信号),硬件异常(例如访问非法内存触发SIGSEGV 信号),或定时器到期(例如 alarm 函数触发 SIGALRM 信号)。
程序无法预测信号的确切触发时机,这种不确定性是异步特性的一个重要方面。
中断当前执行:当信号触发时,操作系统会立即中断当前正在执行的程序流,无论程序此时正在执行什么代码。操作系统保存当前程序的执行上下文(如寄存器状态、程序计数器等),并跳转到信号处理函数执行。
独立于主程序的执行:信号处理函数在执行时,与主程序的执行路径是独立的。它不需要等待主程序的某个步骤完成,也不需要遵循主程序的执行顺序。
在信号处理函数执行期间,主程序的正常执行是被中断的,信号处理函数完成后,程序会恢复到中断的位置继续执行。

  1. Qt信号与槽:

基于Qt框架的高级机制。
用于对象之间的事件通信,体现在都是以Object为基类的类才可以使用信号与槽,Qt的信号与槽机制并不会直接调用POSIX定时器和信号处理。相反,Qt的信号与槽机制是通过元对象系统(Meta-Object System)实现的,这是一套基于反射的机制,允许在运行时检查和调用类的成员。Qt的事件循环和定时器功能也是通过其自身的实现来完成的,而不是直接依赖POSIX定时器和信号处理(Qt通过元对象系统实现信号与槽机制。每个QObject的子类在编译时都会生成一个与之对应的元对象(meta-object),其中包含类的信号和槽的元数据。
moc(Meta-Object Compiler)工具在编译时解析头文件中的信号和槽声明,生成额外的代码来处理信号与槽的连接和调用。)。
线程安全,易于使用和维护。
更抽象和灵活,适合应用程序开发。
Qt信号与槽机制更易于使用和维护,适合于大多数应用程序开发场景,而POSIX定时器和信号处理更适合系统级编程和需要精细控制的场合。
在Qt中,当信号被发射时,它会立即调用所有连接的槽函数。这意味着,如果多个对象连接了同一个信号,它们的槽函数会按照连接的顺序依次执行,直到所有连接的槽函数执行完毕。
这种执行方式是同步的,因为信号的发射和槽函数的执行是在发射信号的上下文中直接调用的,并且没有中断主程序的执行流程。Qt框架本身是基于事件驱动的模型。当某个事件(比如按钮点击)发生时,会触发信号的发射,然后立即调用连接的槽函数。这种模型使得Qt能够更好地处理用户交互事件和对象之间的通信。

僵尸进程:
Linux中SIGCHLD信号与其触发函数:
https://blog.csdn.net/Coldreams/article/details/139749668
https://blog.csdn.net/qq_62987647/article/details/137084744