这本书主要分享了作者在实现公司内部的分布式服务系统中积累的多线程和网络编程方面的经验,并介绍了C++ 在编写这种分布式系统的服务端程序时的功能取舍与注意事项,书中的很多决策(design decision)是在这一应用场景下做出的。这本书没有细谈分布式系统的设计,只在第9章列举了分布式系统的挑战及其对程序设计(服务端编程)的影响,例如可靠性、可维护性等。

以下是各章直接的交叉引用关系图(没有计算引用次数),其中第0章是前言,字母章节是附录。可见第9章“分布式系统工程实践”是被引用最多的一章,全书很多内容都是为它做铺垫。

这本书的书名原本打算叫“Linux C++ 多线程系统编程”。写作中发现,与其他Unix/Linux系统编程方面的书不同,这本书有明确的应用场景,因此可以砍掉很多内容,突出重点。“信息”按照香农的定义,是“减少不确定性”,这本书包含的信息正是减少选用编程设施(facilities)方面的不确定性,让读者集中精力攻克本质问题。这不是一本面面俱到的书,因此最终的书名也就不叫“系统编程”了。举例来说:

·         这本书没有花很大的篇幅去讲signal,而是在第4.10节说明多线程程序不要使用signal作为IPC。并且,在muduo-protorpc的示例中给出了Linux专有的signalfd的用法,可以避免传统signal handler的常见陷阱。第4.4节说明不要从外部终止线程,因此也就不必去细究Pthreads cancellation point了。

·         这本书没介绍daemon进程,因为这种进程的父进程是init(1),不便于监控与管理(第9.8节)。为了管理方便,业务进程不应该fork()。多线程程序也最好不要fork()(第4.9节)。

·         这本书只关注Linux,不考虑移植性。它推荐使用Linux专有的gettid()系统调用作为线程标识(第4.3节),而不是用pthread_self();muduo使用timerfd来实现高精度定时,而且直接使用C++标准库来管理定时器,而不是自己实现小顶堆(heap)。

·         这本书只讲mutex和condition variable作为最基础的线程同步手段(第2章),并且建议只使用非递归的mutex(第2.1.1节),这与某些网上文章的推荐正好相反。这本书第2.3节甚至建议不要使用读写锁和信号量(semaphore),因为一是容易用错,二是不见得能提高性能。有了mutex和condition variable,就能实现多种更易用的同步设施,例如CountDownLatch和BlockingQueue。

·         这本书只讲BSD Sockets作为进程间通信的手段,并且只用TCP长连接(第3.4节)。这样就砍掉了pipe、FIFO、POSIX message queue、shared memory、STREAMS、UNIX domain socket等等内容,因为它们都只限本机进程间通信,无法扩展到多机。

·         网络编程方面(第6、7章),只讲非阻塞IO结合IO复用这一种并发风格(归纳为三个半事件),并介绍在多线程下的扩展(one loop per thread)。本书不讲IPv6,因为目前世界上最大的公司的服务机群也用不完一个私有A类地址(10.0.0.0/8)。

·         这本书举的网络编程的例子不再是简单的echo服务,而是有格式(因此引入codec)、多连接之间会交换数据的网络程序,更接近业务场景,也借机讲解如何避免TCP网络编程的常见陷阱。并且在示例代码中给出了分布式单词计数、多机求中位数等稍微复杂一点的程序。

·         在C++方面,这本书没有介绍动态链接库热更新这种“高级”技术,而是说明,在分布式系统中,为了部署方便,应该从源码编译全部的库,与主程序链接为一个standalone的可执行文件,以减小对运行环境的依赖(第10章)。第11章还讨论了程序库与应用程序之间的接口设计。

更多内容请参考配套网页:chenshuo.com/book,包含样章、勘误表、URL列表等。

书摘

第6.6.2节

关于《Linux多线程服务端编程:使用muduo C++网络库》的内容梳理相关推荐

  1. 新书预告:《Linux 多线程服务端编程——使用 muduo C++ 网络库》

    看完了 W. Richard Stevens 的传世经典<UNIX 网络编程>, 能照着例子用 Sockets API 编写 echo 服务, 却仍然对稍微复杂一点的网络编程任务感到无从下 ...

  2. 《Linux多线程服务端编程——使用muduo C++网络库》读书笔记

    第一章 线程安全的对象生命期管理 第二章 线程同步精要 第三章 多线程服务器的适用场合与常用编程模型 第四章 C++多线程系统编程精要 1.(P84)11个常用的最基本Pthreads函数: 2个:线 ...

  3. 《Linux多线程服务端编程:使用muduoC++网络库》学习笔记

    文章目录 第1章 线程安全的对象生命期管理 1.1 当析构函数遇到多线程 1.1.1 线程安全的定义 1.1.3 线程安全实例 1.2 对象的创建很简单 1.3 销毁很难 1.4 线程安全的Obser ...

  4. 《Linux多线程服务端编程:使用muduo C++网络库》书摘6.6.2节

    6.6.2 常见的并发网络服务程序设计方案 W. Richard Stevens 的<UNIX 网络编程(第2 版)>第27 章"Client-ServerDesign Alte ...

  5. Linux多线程服务端编程学习(四)finger服务的实现

    源码下载以及安装点击链接https://blog.csdn.net/YoungSusie/article/details/90021742 分类 Muduo网络库编程 学习笔记 例 七步实现finge ...

  6. linux多线程服务端编程读书笔记——第三章

    本章作者主要是总结了一两种常用的线程模型.归纳了进程通信与线程同步的最佳实践 进程与线程的区别: 进程是文件系统中的最重要的两个概念之一(令一个是文件).简单地说,一个进程是内存中正在运行的程序.每个 ...

  7. 后台开发经典书籍--Linux多线程服务端编程:使用muduo C++网络库

  8. 评:Linux多线程服务端编程

    9.1分,尼玛,坑谁呢.....  看这里,比较客观  http://ar.newsmth.net/thread-c64b61785ba061.html   muduo适用于什么环境?    mudu ...

  9. 《linux多线程服务端编程》---- C++基础前奏

    1 mutable 在C++中,mutable也是为了突破const的限制而设置的.被mutable修饰的变量,将永远处于可变的状态,即使在一个const函数中. 该关键字修饰类中数据成员时,会释放掉 ...

  10. Linux多线程服务端编程笔记,陈硕Linux多线程服务端编程读书笔记 —— 第一章 线程安全的对象生命周期管理...

    muduo书第一章的思维导图(新窗口打开可以看大图) 线程安全的对象析构和回调(使用shared_ptr和weak_ptr) 注释是英文的(工地英语-) StockFactory.h // in mu ...

最新文章

  1. 皮一皮:这是谁的脚???
  2. 9、Power Map—应用拾取坐标系统确定经纬度
  3. mysql 一对一关联查询_学习ThinkPHP的第20天--MySQL事务操作、查询事件、一对一关联...
  4. Visual Studio 2010 旗舰版安装图解
  5. CF235C-Cyclical Quest【SAM】
  6. Linux安全基础:grep命令的使用
  7. LNMP一键安装shell脚本
  8. Linux 文件夹和文件大小排序
  9. Git版本控制:Git分支处理
  10. 通过mysqladmin监控MySQL数据的服务器状态
  11. 递归算法教学设计java,递归算法数字游戏教学软件的设计|java递归算法经典实例...
  12. java生成对称矩阵_JAVA 对称矩阵的压缩存储
  13. 单片机语音播报怎么做?语音模块原理及程序编写思路
  14. 国内外php主流开源cms汇总
  15. 前端个人博客案例模仿
  16. python+django+vue高校奖学金评定管理系统
  17. php jquery ajax九宫格抽奖,jQuery九宫格抽奖
  18. 10万微商被骗100亿,最大微商集团被爆涉嫌传销
  19. POSCMS 网站设置
  20. 2022-2028全球与中国多通道光纤旋转接头(FORJ)市场现状及未来发展趋势

热门文章

  1. 转 Ubuntu16.04+QT4.8.7开发环境搭建
  2. django 模型增加字段后迁移失败
  3. 平均值的最值化 - 二分
  4. 【C#】开发可以可视化操作的windows服务
  5. SVG-Android开源库——SVG生成Vector资源文件的编辑预览工具
  6. SQL 实战教程(八)
  7. Java中多态的一些简单理解
  8. UIView动画---移动与变形
  9. cello 有关状态
  10. 有感于中国的系统分析员考试