3. 多线程服务器的适用场合与常用编程模型 第3章 多线程服务器的适用场合与常用编程模型 总结了一些常用的线程模型,归纳了进程间通信与线程同步的最佳实践,以期用简单规范的方式开发功能正确、线程安全的多线程程序。本章假定读者已经有多线程编程的知识与经验(本书不是一篇入门教程)。 文中的“多线程服务器”是指运行在Linux操作系统上的独占式网络应用程序。硬件平台为Intel x86-64系列的多核CPU,单路或双路SMP服务器(每台机器 2024-12-24 c++ > muduo多线程服务器 #muduo
2. 线程同步精要 第2章 线程同步精要 并发编程有两种基本模型,一种是message passing,另一种是shared memory。在分布式系统中,运行在多台机器上的多个进程的并行编程只有一种实用模型:message passing。 在单机上,我们也可以照搬message passing作为多个进程的并发模型。这样整个分布式系统的架构的一致性很强,扩容(scale out)起来也较容易。 2024-12-23 c++ > muduo多线程服务器 #muduo
1. 线程安全的对象生命期管理 第1章 线程安全的对象生命期管理 编写线程安全的类不是难事,用同步原语(synchronization primitives)保护内部状态即可。但是对象的生与死不能由对象自身拥有的mutex(互斥器)来保护。 如何避免对象析构时可能存在的race condition(竞态条件)是C++多线程编程面临的基本问题,可以借助Boost库中的shared_ptr和weak_ptr完美解决。这也是 2024-12-22 c++ > muduo多线程服务器 #muduo
17. 系统监测工具 第17章 系统监测工具 1. tcpdump tcpdump常见的选项总结如下: 12345678910111213-n,使用IP地址表示主机,而不是主机名;使用数字表示端口号,而不是服务名称。-i,指定要监听的网卡接口。“-i any”表示抓取所有网卡接口上的数据包。-v,输出一个稍微详细的信息,例如,显示IP数据包中的TTL和TOS信息。-t,不打印时间戳。-e,显示以太网帧头部信息。- 2024-12-16 c++ > Linux高性能服务器-游双 #网络编程
16. 服务器调制、调试和测试 第16章 服务器调制、调试和测试 Linux平台的一个优秀特性是内核微调,即我们可以通过修改文件的方式来调整内核参数。16.2节将讨论与服务器性能相关的部分内核参数。这些内核参数中,系统或进程能打开的最大文件描述符数尤其重要,所以我们在16.1节单独讨论之。 在服务器的开发过程中,我们可能碰到各种意想不到的错误。一种调试方法是用tcpdump抓包,正如本书前面章节介绍的那样。不过这种方法主要用 2024-12-16 c++ > Linux高性能服务器-游双 #网络编程
15. 进程池和线程池 第15章 进程池和线程池 在前面的章节中,我们是通过动态创建子进程(或子线程)来实现并发服务器的。这样做有如下缺点: 动态创建进程(或线程)是比较耗费时间的,这将导致较慢的客户响应。 动态创建的子进程(或子线程)通常只用来为一个客户服务(除非我们做特殊的处理),这将导致系统上产生大量的细微进程(或线程)。进程(或线程)间的切换将消耗大量CPU时间。 动态创建的子进程是当前进程的完整映像 2024-12-16 c++ > Linux高性能服务器-游双 #网络编程
14. 多线程编程 第14章 多线程编程 自内核2.6开始,Linux才真正提供内核级的线程支持,并有两个组织致力于编写新的线程库:NGPT(Next Generation POSIX Threads)和NPTL(Native POSIX Thread Library)。不过前者在2003年就放弃了,因此新的线程库就称为NPTL。NPTL比LinuxThreads效率高,且更符合POSIX规范,所以它已经成为g 2024-12-16 c++ > Linux高性能服务器-游双 #网络编程
13. 多进程编程 第13章 多进程编程 进程是Linux操作系统环境的基础,它控制着系统上几乎所有的活动。本章从系统程序员的角度来讨论Linux多进程编程,包括如下内容: ❑复制进程映像的fork系统调用和替换进程映像的exec系列系统调用。 ❑僵尸进程以及如何避免僵尸进程。 ❑进程间通信(Inter-Process Communication,IPC)最简单的方式:管道。 ❑3种System V进程 2024-12-16 c++ > Linux高性能服务器-游双 #网络编程
12. 高性能I/O框架库Libevent 第12章 高性能I/O框架库Libevent 前面三章的篇幅较为细致地讨论了Linux服务器程序必须处理的三类事件:I/O事件、信号和定时事件。在处理这三类事件时我们通常需要考虑如下三个问题: ❑统一事件源。很明显,统一处理这三类事件既能使代码简单易懂,又能避免一些潜在的逻辑错误。前面我们已经讨论了实现统一事件源的一般方法——利用I/O复用系统调用来管理所有事件。 ❑可移植性。不同的操作系 2024-12-16 c++ > Linux高性能服务器-游双 #网络编程
11. 定时器 第11章 定时器 网络程序需要处理的第三类事件是定时事件。服务器程序通常管理着众多定时事件,因此有效地组织这些定时事件,使之能在预期的时间点被触发且不影响服务器的主要逻辑,对于服务器的性能有着至关重要的影响。 为此,我们要将每个定时事件分别封装成定时器,并使用某种容器类数据结构,比如链表、排序链表和时间轮,将所有定时器串联起来,以实现对定时事件的统一管理。 本章讨论的就是两种高效的管理定时器 2024-12-16 c++ > Linux高性能服务器-游双 #网络编程