- 博客(1158)
- 资源 (17)
- 收藏
- 关注
原创 第4部分 附录A 谈一谈网络编程学习经验
本文谈一谈我在学习网络编程方面的一些个人经验。“网络编程”这个术语的范围很广,本文指用Sockets API开发基于TCP/IP的网络应用程序,具体定义见§ A.1.5“网络编程的各种任务角色”。受限于本人的经历和经验,本附录的适应范围是:● x86-64 Linux服务端网络编程,直接或间接使用Sockets API。● 公司内网。不一定是局域网,但总体位于公司防火墙之内,环境可控。
2025-12-08 23:16:28
536
原创 第12章 C++经验谈(2)
我对C++的基本态度是“练从难处练,用从易处用”,因此本章有几节“负面”的内容。我坚信软件开发一定要时刻注意减少不必要的复杂度,一些花团锦簇的招式玩不好反倒会伤到自己。作为应用程序的开发者,对技术的运用要明智,不要为了解决难度系数为10的问题而去强攻难度系数为100的问题,这就本末倒置了。
2025-12-02 23:12:12
971
原创 第12章 C++经验谈(1)
我对C++的基本态度是“练从难处练,用从易处用”,因此本章有几节“负面”的内容。我坚信软件开发一定要时刻注意减少不必要的复杂度,一些花团锦簇的招式玩不好反倒会伤到自己。作为应用程序的开发者,对技术的运用要明智,不要为了解决难度系数为10的问题而去强攻难度系数为100的问题,这就本末倒置了。
2025-12-01 22:47:47
548
原创 第11章 反思 C++ 面向对象与虚函数(3)
C++的面向对象语言设施相比其他现代语言可算得上“简陋”,而且与语言的其他部分(better C、数据抽象、泛型)融合度较差(见电子工业出版社出版的《C++Primer(第4版)(评注版)》第15章)。在C++中进行面向对象编程会遇到其他语言中不存在的问题,其本质原因是C++ class是值语义,而非对象语义。本章主要介绍虚函数存在的问题和替代方法,iostream的用途与局限,值语义与数据抽象。
2025-11-30 23:30:07
825
原创 第11章 反思 C++ 面向对象与虚函数(2)
C++的面向对象语言设施相比其他现代语言可算得上“简陋”,而且与语言的其他部分(better C、数据抽象、泛型)融合度较差(见电子工业出版社出版的《C++Primer(第4版)(评注版)》第15章)。在C++中进行面向对象编程会遇到其他语言中不存在的问题,其本质原因是C++ class是值语义,而非对象语义。本章主要介绍虚函数存在的问题和替代方法,iostream的用途与局限,值语义与数据抽象。
2025-11-28 23:06:19
707
原创 第11章 反思 C++ 面向对象与虚函数(1)
C++的面向对象语言设施相比其他现代语言可算得上“简陋”,而且与语言的其他部分(better C、数据抽象、泛型)融合度较差(见电子工业出版社出版的《C++Primer(第4版)(评注版)》第15章)。在C++中进行面向对象编程会遇到其他语言中不存在的问题,其本质原因是C++ class是值语义,而非对象语义。本章主要介绍虚函数存在的问题和替代方法,iostream的用途与局限,值语义与数据抽象。
2025-11-27 23:38:11
762
原创 第10章 C++编译链接模型精要(2)
C++从C语言继承了一种古老的编译模型,引发了其他语言中根本不存在的一些编译方面的问题(比方说“一次定义原则(ODR))。理解这些问题有助于在实际开发中规避各种古怪的错误。本章主要介绍C语言的编译模型及其成因,C++的编译模型,C++链接(linking),工程项目中头文件的使用规则,工程项目中库文件的组织原则
2025-11-26 23:48:01
621
原创 第10章 C++编译链接模型精要(1)
C++从C语言继承了一种古老的编译模型,引发了其他语言中根本不存在的一些编译方面的问题(比方说“一次定义原则(ODR))。理解这些问题有助于在实际开发中规避各种古怪的错误。本章主要介绍C语言的编译模型及其成因,C++的编译模型,C++链接(linking),工程项目中头文件的使用规则,工程项目中库文件的组织原则
2025-11-21 23:35:41
796
原创 第9章 分布式系统工程实践(2)
本章谈的分布式系统是指运行在公司防火墙以内的信息基础设施(infrastruc-ture),用于对外(客户)提供联机信息服务,不是针对公司员工的办公自动化系统。服务器的硬件平台是多核Intel x86-64处理器、几十GB内存、千兆网互联、常规存储、运行Linux操作系统。系统的规模大约在几十台到几百台,可以位于一个机房,也可以位于全球的多个数据中心。只有两台机器的双机容错(热备)系统不是本章的讨论范围。服务程序是普通的Linux用户进程,进程之间通过TCP/IP通信。
2025-11-15 23:09:08
745
原创 第9章 分布式系统工程实践(1)
本章谈的分布式系统是指运行在公司防火墙以内的信息基础设施(infrastruc-ture),用于对外(客户)提供联机信息服务,不是针对公司员工的办公自动化系统。服务器的硬件平台是多核Intel x86-64处理器、几十GB内存、千兆网互联、常规存储、运行Linux操作系统。系统的规模大约在几十台到几百台,可以位于一个机房,也可以位于全球的多个数据中心。只有两台机器的双机容错(热备)系统不是本章的讨论范围。服务程序是普通的Linux用户进程,进程之间通过TCP/IP通信。
2025-11-14 23:50:07
612
原创 第8章 muduo网络库设计与实现(4)
本章从零开始逐步实现一个类似muduo的基于Reactor模式的C++网络库,大体反映了muduo网络相关部分的开发过程。本章大致分为三段,为了与代码匹配,本章的小节从0开始编号。注意本章呈现的代码与现在muduo的代码略有出入。
2025-11-13 23:27:55
922
原创 第8章 muduo网络库设计与实现(3)
本章从零开始逐步实现一个类似muduo的基于Reactor模式的C++网络库,大体反映了muduo网络相关部分的开发过程。本章大致分为三段,为了与代码匹配,本章的小节从0开始编号。注意本章呈现的代码与现在muduo的代码略有出入。
2025-11-12 23:56:54
766
原创 第8章 muduo网络库设计与实现(2)
本章从零开始逐步实现一个类似muduo的基于Reactor模式的C++网络库,大体反映了muduo网络相关部分的开发过程。本章大致分为三段,为了与代码匹配,本章的小节从0开始编号。注意本章呈现的代码与现在muduo的代码略有出入。
2025-11-11 23:25:27
1038
原创 第8章 muduo网络库设计与实现(1)
本章从零开始逐步实现一个类似muduo的基于Reactor模式的C++网络库,大体反映了muduo网络相关部分的开发过程。本章大致分为三段,为了与代码匹配,本章的小节从0开始编号。注意本章呈现的代码与现在muduo的代码略有出入。
2025-11-09 23:19:07
958
原创 第7章 muduo编程示例(11)
本章将介绍如何用muduo网络库完成常见的TCP网络编程任务。内容如下:1.[UNP]中的五个简单协议。2.文件传输,示范非阻塞TCP网络程序中如何完整地发送数据。3.Boost.Asio中的示例。4.muduo Buffer class的设计与使用。5.Protobuf编码解码器(codec)与消息分发器(dispatcher)。6.限制服务器的最大并发连接数。7.Java Netty中的示例。8.用于测试两台机器的往返延迟的roundtrip。9.用timing wheel踢掉空闲连接。等等。。。
2025-11-08 23:36:30
1024
原创 第7章 muduo编程示例(10)
本章将介绍如何用muduo网络库完成常见的TCP网络编程任务。内容如下:1.[UNP]中的五个简单协议。2.文件传输,示范非阻塞TCP网络程序中如何完整地发送数据。3.Boost.Asio中的示例。4.muduo Buffer class的设计与使用。5.Protobuf编码解码器(codec)与消息分发器(dispatcher)。6.限制服务器的最大并发连接数。7.Java Netty中的示例。8.用于测试两台机器的往返延迟的roundtrip。9.用timing wheel踢掉空闲连接。等等。。。
2025-11-07 23:13:06
825
原创 第7章 muduo编程示例(9)
本章将介绍如何用muduo网络库完成常见的TCP网络编程任务。内容如下:1.[UNP]中的五个简单协议。2.文件传输,示范非阻塞TCP网络程序中如何完整地发送数据。3.Boost.Asio中的示例。4.muduo Buffer clss的设计与使用。5.Protobuf编码解码器(codec)与消息分发器(dispatcher)。6.限制服务器的最大并发连接数。7.Java Netty中的示例。8.用于测试两台机器的往返延迟的roundtrip。9.用timing wheel踢掉空闲连接。等等。。。
2025-11-01 23:01:12
945
原创 第7章 muduo编程示例(8)
本章将介绍如何用muduo网络库完成常见的TCP网络编程任务。内容如下:1.[UNP]中的五个简单协议。2.文件传输,示范非阻塞TCP网络程序中如何完整地发送数据。3.Boost.Asio中的示例。4.muduo Buffer clss的设计与使用。5.Protobuf编码解码器(codec)与消息分发器(dispatcher)。6.限制服务器的最大并发连接数。7.Java Netty中的示例。8.用于测试两台机器的往返延迟的roundtrip。9.用timing wheel踢掉空闲连接。等等。。。
2025-10-31 23:23:38
595
原创 第7章 muduo编程示例(7)
本章将介绍如何用muduo网络库完成常见的TCP网络编程任务。内容如下:1.[UNP]中的五个简单协议。2.文件传输,示范非阻塞TCP网络程序中如何完整地发送数据。3.Boost.Asio中的示例。4.muduo Buffer class的设计与使用。5.Protobuf编码解码器(codec)与消息分发器(dispatcher)。6.限制服务器的最大并发连接数。7.Java Netty中的示例。8.用于测试两台机器的往返延迟的roundtrip。9.用timing wheel踢掉空闲连接。等等。。。
2025-10-30 23:34:49
620
原创 第7章 muduo编程示例(6)
本章将介绍如何用muduo网络库完成常见的TCP网络编程任务。内容如下:1.[UNP]中的五个简单协议。2.文件传输,示范非阻塞TCP网络程序中如何完整地发送数据。3.Boost.Asio中的示例。4.muduo Buffer class的设计与使用。5.Protobuf编码解码器(codec)与消息分发器(dispatcher)。6.限制服务器的最大并发连接数。7.Java Netty中的示例。8.用于测试两台机器的往返延迟的roundtrip。9.用timing wheel踢掉空闲连接。等等。。。
2025-10-26 23:36:36
939
原创 第7章 muduo编程示例(5)
本章将介绍如何用muduo网络库完成常见的TCP网络编程任务。内容如下:1.[UNP]中的五个简单协议。2.文件传输,示范非阻塞TCP网络程序中如何完整地发送数据。3.Boost.Asio中的示例。4.muduo Buffer class的设计与使用。5.Protobuf编码解码器(codec)与消息分发器(dispatcher)。6.限制服务器的最大并发连接数。7.Java Netty中的示例。8.用于测试两台机器的往返延迟的roundtrip。9.用timing wheel踢掉空闲连接。等等。。。
2025-10-25 23:31:39
1061
原创 第7章 muduo编程示例(4)
本章将介绍如何用muduo网络库完成常见的TCP网络编程任务。内容如下:1.[UNP]中的五个简单协议。2.文件传输,示范非阻塞TCP网络程序中如何完整地发送数据。3.Boost.Asio中的示例。4.muduo Buffer clss的设计与使用。5.Protobuf编码解码器(codec)与消息分发器(dispatcher)。6.限制服务器的最大并发连接数。7.Java Netty中的示例。8.用于测试两台机器的往返延迟的roundtrip。9.用timing wheel踢掉空闲连接。等等。。。
2025-10-24 23:45:16
997
原创 第7章 muduo编程示例(3)
本章将介绍如何用muduo网络库完成常见的TCP网络编程任务。内容如下:1.[UNP]中的五个简单协议。2.文件传输,示范非阻塞TCP网络程序中如何完整地发送数据。3.Boost.Asio中的示例。4.muduo Buffer class的设计与使用。5.Protobuf编码解码器(codec)与消息分发器(dispatcher)。6.限制服务器的最大并发连接数。7.Java Netty中的示例。8.用于测试两台机器的往返延迟的roundtrip。9.用timing wheel踢掉空闲连接。等等。。。
2025-10-20 23:31:07
798
原创 第7章 muduo编程示例(2)
本章将介绍如何用muduo网络库完成常见的TCP网络编程任务。内容如下:1.[UNP]中的五个简单协议。2.文件传输,示范非阻塞TCP网络程序中如何完整地发送数据。3.Boost.Asio中的示例。4.muduo Buffer class的设计与使用。5.Protobuf编码解码器(codec)与消息分发器(dispatcher)。6.限制服务器的最大并发连接数。7.Java Netty中的示例。8.用于测试两台机器的往返延迟的roundtrip。9.用timing wheel踢掉空闲连接。等等。。。
2025-10-19 23:12:30
768
原创 第7章 muduo编程示例(1)
本章将介绍如何用muduo网络库完成常见的TCP网络编程任务。内容如下:1.[UNP]中的五个简单协议。2.文件传输,示范非阻塞TCP网络程序中如何完整地发送数据。3.Boost.Asio中的示例。4.muduo Buffer class的设计与使用。5.Protobuf编码解码器(codec)与消息分发器(dispatcher)。6.限制服务器的最大并发连接数。7.Java Netty中的示例。8.用于测试两台机器的往返延迟的roundtrip。9.用timing wheel踢掉空闲连接。等等。。。
2025-10-16 23:48:34
1084
原创 第6章 muduo网络库简介(2)
2010年3月我写了一篇《学之者生,用之者死——ACE历史与简评》,其中提到“我心目中理想的网络库”的样子:● 线程安全,原生支持多核多线程。● 不考虑可移植性,不跨平台,只支持Linux,不支持Windows。● 主要支持x86-64,兼顾IA32。● 不支持UDP,只支持TCP。● 不支持IPv6,只支持IPv4。● 不考虑广域网应用,只考虑局域网。。。。在想清楚这些目标之后,我开始第三次尝试编写自己的C++网络库。与前两次不同,这次我一开始就想好了库的名字,叫muduo
2025-10-13 23:26:18
762
原创 第6章 muduo网络库简介(1)
2010年3月我写了一篇《学之者生,用之者死——ACE历史与简评》,其中提到“我心目中理想的网络库”的样子:● 线程安全,原生支持多核多线程。● 不考虑可移植性,不跨平台,只支持Linux,不支持Windows。● 主要支持x86-64,兼顾IA32。● 不支持UDP,只支持TCP。● 不支持IPv6,只支持IPv4。● 不考虑广域网应用,只考虑局域网。。。。在想清楚这些目标之后,我开始第三次尝试编写自己的C++网络库。与前两次不同,这次我一开始就想好了库的名字,叫muduo
2025-10-10 23:53:18
652
原创 第5章 高效的多线程日志
本章的“日志”是前一个意思,即文本的、供人阅读的日志,通常用于故障诊断和追踪(trace),也可用于性能分析。对于关键进程,日志通常要记录:1.收到的每条内部消息的id(还可以包括关键字段、长度、hash等);2.收到的每条外部消息的全文;3.发出的每条消息的全文,每条消息都有全局唯一的id;4.关键内部状态的变更,等等。每条日志都有时间戳,这样就能完整追踪分布式系统中一个事件的来龙去脉。也只有这样才能查清楚发生故障时究竟发生了什么,比如业务处理流程卡在了哪一步。
2025-10-09 23:16:54
1071
原创 第4章 C++多线程系统编程精要
学习多线程编程面临的最大的思维方式的转变有两点:● 当前线程可能随时会被切换出去,或者说被抢占(preempt)了。● 多线程程序中事件的发生顺序不再有全局统一的先后关系。当线程被切换回来继续执行下一条语句(指令)的时候,全局数据(包括当前进程在操作系统内核中的状态)可能已经被其他线程修改了。这些都会导致程序异常,本篇介绍c++多线程系统编程中的要点。
2025-10-08 23:36:31
686
原创 第3章 多线程服务器的适用场合与常用编程模型
本章主要讲我个人在多线程开发方面的一些粗浅经验。总结了一两种常用的线程模型,归纳了进程间通信与线程同步的最佳实践,以期用简单规范的方式开发功能正确、线程安全的多线程程序。本章假定读者已经有多线程编程的知识与经验(本书不是一篇入门教程)。文中的“多线程服务器”是指运行在Linux操作系统上的独占式网络应用程序。硬件平台为Intel x86-64系列的多核CPU,单路或双路SMP服务器(每台机器一共拥有四个核或八个核,十几GB内存),机器之间用千兆以太网连接。这大概是目前民用PC服务器的主流配置。
2025-10-07 23:09:33
1105
原创 第2章 线程同步精要
并发编程有两种基本模型,一种是message passing,另一种是shared memory。在分布式系统中,运行在多台机器上的多个进程的并行编程只有一种实用模型:message passing。在多线程编程中,message passing更容易保证程序的正确性,有的语言只提供这一种模型。不过在用C/C++编写多线程程序时,我们仍然需要了解底层的shared memory模型下的同步原语,以备不时之需。本章不是多线程教程,而是个人经验总结,分享一些C++多线程编程的经验.
2025-10-06 23:18:28
891
原创 VS2019如何获取C++标准库的版本
咱们在开发c++项目的过程中,经常是采用默认的c++标准库版本,有时一些新功能需要特定的标准库版,那些如何知道标准库的版以及设置标准库的版本呢?本篇记录在VS2019上查看和设置标准库的版本。
2025-10-05 23:28:10
210
原创 第1章 线程安全的对象生命期管理
编写线程安全的类不是难事,用同步原语(synchronization primitives)保护内部状态即可。但是对象的生与死不能由对象自身拥有的mutex(互斥器)来保护。如何避免对象析构时可能存在的race condition(竞态条件)是C++多线程编程面临的基本问题,可以借助Boost库中的shared_ptr和weak_ptr [注:在cpp11中这两个类已是标准库的一部分]完美解决。这也是实现线程安全的Observer模式的必备技术。
2025-10-04 23:52:45
629
原创 Linux多线程服务端编程:使用muduo C++网络库学习之环境配置(VS2019跨平台开发)
本篇记录《Linux多线程服务端编程:使用muduo C++网络库》在ubuntu1804系统上开发环境的配置,包括cmake的安装,boost库的安装与测试,muduo网络库的编译,安装与测试,以及用VS2019开发Linux程序的配置。
2025-10-02 23:00:46
1007
原创 Linux常用命令58——grep文本搜索命令
在使用Linux或macOS日常开发中,熟悉一些基本的命令有助于提高工作效率,本篇学习记录grep命令的基本使用。grep命令来自英文词组global search regular expression and print out the line的缩写,意思是用于全面搜索的正则表达式,并将结果输出。
2025-09-30 23:06:23
1400
原创 Linux常用命令57——scp
在使用Linux或macOS日常开发中,熟悉一些基本的命令有助于提高工作效率,本篇学习记录scp命令的基本使用。scp 是 secure copy 的缩写, scp 是 linux 系统下基于 ssh 登陆进行安全的远程文件拷贝命令。它基于 SSH(Secure Shell)协议,确保数据传输的安全性。其实window上也有scp命令,也可以实现window与linux进行文件传输。
2025-09-29 23:02:49
620
原创 Linux常用命令56——man
在使用Linux或macOS日常开发中,熟悉一些基本的命令有助于提高工作效率,本篇学习记录man命令的基本使用。man命令来自英文单词manual的缩写,中文译为“帮助手册”,其功能是查看命令、配置文件及服务的帮助信息。
2025-09-28 23:08:26
1046
原创 Linux常用命令55——ln
在使用Linux或macOS日常开发中,熟悉一些基本的命令有助于提高工作效率, ln(英文全拼:link files)命令是一个非常重要命令,它的功能是为某一个文件在另外一个位置建立一个同步的链接。当我们需要在不同的目录,用到相同的文件时,我们不需要在每一个需要的目录下都放一个必须相同的文件,我们只要在某个固定的目录,放上该文件,然后在 其它的目录下用ln命令链接(link)它就可以,不必重复的占用磁盘空间。本篇学习记录ln命令的基本使用。
2025-09-27 23:57:51
363
原创 Linux常用命令54——ldd
在使用Linux或macOS日常开发中,熟悉一些基本的命令有助于提高工作效率,ldd(List Dynamic Dependencies)是 Linux 系统中一个非常有用的命令行工具,用于显示程序或共享库所依赖的动态链接库。当你在 Linux 上运行一个程序时,系统需要加载该程序依赖的各种共享库(.so 文件),ldd 就是用来查看这些依赖关系的工具。本篇学习记录ldd命令的基本使用。
2025-09-26 23:26:20
383
原创 Linux常用命令53——file识别文件类型
在使用Linux或macOS日常开发中,熟悉一些基本的命令有助于提高工作效率,file命令的功能是识别文件类型,也可以用来辨别一些内容的编码格式。由于Linux系统并不是像Windows系统那样通过扩展名来定义文件类型的,因此用户无法直接通过文件名来进行区别。file命令可以通过分析文件头部信息中的标识信息来显示文件类型,使用很方便。本篇学习记录file命令的基本使用。
2025-09-25 23:16:46
375
computer-vision计算机视图算法opencv相关
2024-03-03
QTreeView+自定义Model实现示例
2022-07-01
VC++ 6.0数据库系统开发实例导航源码
2011-10-23
C++ Qt设计模式第2版(中英文版)+源码
2015-09-02
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅