13. 谈一谈网络编程学习经验 附录 A 谈一谈网络编程学习经验 本文谈一谈我在学习网络编程方面的一些个人经验。“网络编程”这个术语的范围很广,本文指用 Sockets API 开发基于 TCP/IP 的网络应用程序,具体定义见 SA.1.5“网络编程的各种任务角色”. 受限于本人的经历和经验,本附录的适应范围是: - x86-64 Linux 服务端网络编程,直接或间接使用 Sockets API. - 公司内网 2025-01-05 c++ > muduo多线程服务器 #muduo
12. C++经验谈 第12章 C++经验谈 我对C++的基本态度是“练从难处练,用从易处用” 1. 用异或来交换变量是错误的 翻转一个字符串,例如把"12345"变成“54321”,这是一个最简单不过的编码任务,即便是C语言初学者也能毫不费力地写出类似如下的代码: Version 1 版本一,用中间变量交换两个数,好代码 1234567891011void reverse_by_swap(char* st 2025-01-05 c++ > muduo多线程服务器 #muduo
11. 反思C++面向对象与虚函数 第11章 反思C++面向对象与虚函数 C++的面向对象语言设施相比其他现代语言可算得上“简陋”,而且与语言的其他部分(better C、数据抽象、泛型)融合度较差(见电子工业出版社出版的《C++ Primer(第4版)(评注版)》第15章)。在C++中进行面向对象编程会遇到其他语言中不存在的问题,其本质原因是C++ class是值语义,而非对象语义。 1. 朴实的C++设计 C++是 2025-01-03 c++ > muduo多线程服务器 #muduo
10. C++编译链接模型精要 第10章 C++编译链接模型精要 C++从C语言继承了一种古老的编译模型,引发了其他语言中根本不存在的一些编译方面的问题(比如“一次定义原则(ODR)”)。理解这些问题有助于在实际开发中规避各种古怪的错误。 C++语言的三大约束是:与C兼容、零开销(zero overhead)原则、值语义。下面谈谈第一点“与C兼容”。 “与C兼容”的含义很丰富,不仅仅是兼容C的语法,更重要的是兼容C语言 2025-01-03 c++ > muduo多线程服务器 #muduo
9. 分布式系统工程实践 第9章 分布式系统工程实践 本章谈的分布式系统是指运行在公司防火墙以内的信息基础设施,用于对外(客户)提供联机信息服务,不是针对公司员工的办公自动化系统。服务器的硬件平台是多核Intel x86-64处理器、几十GB内存、千兆网互联、常规存储、运行Linux操作系统。系统的规模大约在几十台到几百台,可以位于一个机房,也可以位于全球的多个数据中心。只有两台机器的双机容错(热备)系统不是本章的讨 2025-01-03 c++ > muduo多线程服务器 #muduo
8. muduo网络库设计与实现 第8章 muduo网络库设计与实现 0. 什么都不做的EventLoop 首先定义EventLoop class的基本接口:构造函数、析构函数、loop()成员函数。注意EventLoop是不可拷贝的,因此它继承了boost::noncopyable。muduo中的大多数class都是不可拷贝的,因此以后只会强调某个class是可拷贝的。 1234567891011121314151617 2024-12-27 c++ > muduo多线程服务器 #muduo
7. muduo编程示例 第7章 muduo编程示例 本章将介绍如何用muduo网络库完成常见的TCP网络编程任务。内容包括: 1. 五个简单TCP示例 本节将介绍五个简单TCP网络服务程序,包括echo(RFC862)、discard(RFC863)、chargen(RFC864)、daytime(RFC867)、time(RFC868)这五个协议,以及time协议的客户端。各程序的协议简介如下。 disca 2024-12-25 c++ > muduo多线程服务器 #muduo
6. muduo网络库简介 第6章 muduo网络库简介 1. 由来 2010年3月我写了一篇《学之者生,用之者死——ACE历史与简评》,其中提到“我心目中理想的网络库”的样子: 线程安全,原生支持多核多线程。 不考虑可移植性,不跨平台,只支持Linux,不支持Windows。 主要支持x86-64,兼顾IA32。(实际上muduo也可以运行在ARM上。) 不支持UDP,只支持TCP。 不支持IPv6,只 2024-12-25 c++ > muduo多线程服务器 #muduo
5. 高效的多线程日志 第5章 高效的多线程日志 “日志(logging)”有两个意思: 诊断日志(diagnostic log)即log4j、logback、slf4j、glog、g2log、log4cxx、log4cpp、log4cplus、Pantheios、ezlogger等常用日志库提供的日志功能。 交易日志(transaction log)即数据库的write-ahead log、文件系统的jo 2024-12-25 c++ > muduo多线程服务器 #muduo
4. C++多线程系统编程精要 第4章 C++多线程系统编程精要 学习多线程编程面临的最大的思维方式的转变有两点: 1. 当前线程可能随时会被切换出去,或者说被抢占(preempt)了。 2. 多线程程序中事件的发生顺序不再有全局统一的先后关系。 当线程被切换回来继续执行下一条语句(指令)的时候,全局数据(包括当前进程在操作系统内核中的状态)可能已经被其他线程修改了。例如,在没有为指针P加锁的情况下,if (p & 2024-12-24 c++ > muduo多线程服务器 #muduo