读书频道 > 网站 > 网页设计 > Linux多线程服务端编程:使用muduo C++网络库
前言
13-01-24    奋斗的小年轻
收藏    我要投稿   
本书主要讲述采用现代C++在x86-64 Linux上编写多线程TCP网络服务程序的主流常规技术,重点讲解一种适应性较强的多线程服务器的编程模型,即one loop per thread。这是在Linux下以native语言编写用户态高性能...立即去当当网订购

本书主要讲述采用现代C++ 在x86-64 Linux 上编写多线程TCP 网络服务程序的主流常规技术,这也是我对过去5 年编写生产环境下的多线程服务端程序的经验总结。本书重点讲解多线程网络服务器的一种IO 模型,即one loop per thread。这是一种适应性较强的模型,也是Linux 下以native 语言编写用户态高性能网络程序最成熟的模式,掌握之后可顺利地开发各类常见的服务端网络应用程序。本书以muduo网络库为例,讲解这种编程模型的使用方法及注意事项。

muduo 是一个基于非阻塞IO 和事件驱动的现代C++ 网络库,原生支持oneloop per thread 这种IO 模型。muduo 适合开发Linux 下的面向业务的多线程服务端网络应用程序,其中“面向业务的网络编程”的定义见附录A。“现代C++”指的不是C++11 新标准,而是2005 年TR1 发布之后的C++ 语言和库。与传统C++ 相比,现代C++ 的变化主要有两方面:资源管理(见第1 章)与事件回调(见第449 页)。

本书不是多线程编程教程,也不是网络编程教程,更不是C++ 教程。读者应该已经大致读过《UNIX 环境高级编程》、《UNIX 网络编程》、《C++ Primer》或与之内容相近的书籍。本书不谈C++11,因为目前(2012 年)主流的Linux 服务端发行版的g++ 版本都还停留在4.4,C++11 进入实用尚需一段时日。

本书适用的硬件环境是主流x86-64 服务器,多路多核CPU、几十GB 内存、千兆以太网互联。除了第5 章讲诊断日志之外,本书不涉及文件IO。

本书分为四大部分,第1 部分“C++ 多线程系统编程”考察多线程下的对象生命期管理、线程同步方法、多线程与C++ 的结合、高效的多线程日志等。第2 部分“muduo 网络库”介绍使用现成的非阻塞网络库编写网络应用程序的方法,以及muduo 的设计与实现。第3 部分“工程实践经验谈”介绍分布式系统的工程化开发方法和C++ 在工程实践中的功能特性取舍。第4 部分“附录”分享网络编程和C++语言的学习经验。

本书的宗旨是贵精不贵多。掌握两种基本的同步原语就可以满足各种多线程同步的功能需求,还能写出更易用的同步设施。掌握一种进程间通信方式和一种多线程网络编程模型就足以应对日常开发任务,编写运行于公司内网环境的分布式服务系统。(本书不涉及分布式存储系统,也不涉及UDP。)

术语与排版范例

本书大量使用英文术语,甚至有少量英文引文。设计模式的名字一律用英文,例如Observer、Reactor、Singleton。在中文术语不够突出时,也会使用英文,例如class、heap、event loop、STL algorithm 等。注意几个中文C++ 术语: 对象实体(instance)、函数重载决议(resolution)、模板具现化(instantiation)、覆写(override)虚函数、提领(dereference)指针。本书中的英语可数名词一般不用复数形式,例如两个class,6 个syscall;但有时会用(s) 强调中文名词是复数。fd 是文件描述符(file descriptor)的缩写。“CPU 数目”一般指的是核(core)的数目。容量单位kB、MB、GB 表示的字节数分别为103、106、109,在特别强调准确数值时,会分别用KiB、MiB、GiB 表示210、220、230 字节。用诸如§11.5 表示本书第11.5 节,L42 表示上下文中出现的第42 行代码。[JCP]、[CC2e] 等是参考文献,见书末清单。

一般术语用普通罗马字体,如mutex、socket;C++ 关键字用无衬线字体,如class、this、mutable;函数名和class 名用等宽字体,如fork(2)、muduo::EventLoop,其中fork(2) 表示系统函数fork() 的文档位于manpage 第2 节,可以通过man 2 fork命令查看。如果函数名或类名过长,可能会折行,行末有连字号“-”,如EventLoop-ThreadPool。文件路径和URL 采用窄字体,例如muduo/base/Date.h、http://chenshuo.com。用中文楷体表示引述别人的话。

代码

本书的示例代码以开源项目的形式发布在GitHub 上,地址是

http://github.com/chenshuo/recipes/ 和http://github.com/chenshuo/muduo/。本书配套页面提供全部源代码打包下载,正文中出现的类似recipes/thread 的路径是压缩包内的相对路径,读者不难找到其对应的GitHub URL。本书引用代码的形式如下,左侧数字是文件的行号,右侧的“muduo/base/Types.h”是文件路径1。例如下面这几行代码是muduo::string 的typedef。
muduo/base/Types.h
15 namespace muduo
16 {
17
18 #ifdef MUDUO_STD_STRING
19 using std::string;
20 #else // !MUDUO_STD_STRING
21 typedef __gnu_cxx::__sso_string string;
22 #endif
muduo/base/Types.h

在第6、7 两章的muduo 示例代码中,路径muduo/examples/XXX 会简写为examples/XXX。此外,第8 章会把recipes/reactor/XXX 简写为reactor/XXX。

本书假定读者熟悉diff -u 命令的输出格式,用于表示代码的改动。

本书正文中出现的代码有时为了照顾排版而略有改写,例如改变缩进规则,去掉单行条件语句前后的花括号等。就编程风格而论,应以电子版代码为准。

联系方式

邮箱:giantchen@gmail.com

主页:http://chenshuo.com/book (正文和脚注中出现的URL 可从这里找到。)

微博:http://weibo.com/giantchen

博客:http://blog.csdn.net/Solstice

代码:http://github.com/chenshuo

陈硕
中国•香港

点击复制链接 与好友分享!回本站首页
分享到: 更多
您对本文章有什么意见或着疑问吗?请到论坛讨论您的关注和建议是我们前行的参考和动力  
上一篇:1.3 功能
下一篇:1.5 小结
相关文章
图文推荐
JavaScript网页动画设
1.9 响应式
1.8 登陆页式
1.7 主题式
排行
热门
文章
下载
读书

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训
版权所有: 红黑联盟--致力于做最好的IT技术学习网站