
muduo网络库
本专栏的内容来自于陈硕前辈的《Linux多线程服务端编程 使用muduo C++网络库》书中的内容,是本人的读书笔记,也可以供大家阅读。最后,感谢陈硕前辈撰写此书
董哥的黑板报
90后程序员!
展开
-
muduo网络库:21---muduo简介之(详解muduo多线程模型)
muduo的线程模型为one loop per thread+thread pool模型,在前面一篇文章的末尾曾简单的提起过:https://blog.youkuaiyun.com/qq_41453285/article/details/105104845 本节以一个Sudoku Solver(数独求解)例子为例,回顾了并发网络服务程序的多种设计方案,并介绍了使用muduo网络库编写多线程服务器的两种最常用手法 在后面“muduo编程示例”相关文章会展现muduo在编写单线程并发网络服务程序方面的能力与便捷性。本文原创 2020-12-21 20:12:04 · 1899 阅读 · 0 评论 -
muduo网络库:20---muduo简介之(muduo性能测评:吞吐量、事件处理效率、延迟)
性能对比原则:采用对方的性能测试方案,用muduo实现功能相同 或类似的程序,然后放到相同的软硬件环境中对比。 注意这里的测试只是简单地比较了平均值;其实在严肃的性能对比 中至少还应该考虑分布和百分位数(percentile)的值(http://zedshaw.com/essays/programmer_stats.html、http://www.percona.com/files/presentations/VELOCITY2012-Beyond-the-Numbers.pdf)。限于篇幅, 此处从略原创 2020-06-29 12:52:16 · 6133 阅读 · 1 评论 -
muduo网络库:19---muduo简介之(使用教程:TCP网络编程本质论、echo服务的实现、七步实现finger服务)
本节主要介绍muduo网络库的使用,其设计与实现将在后面系列文章讲解 muduo只支持Linux 2.6.x下的并发非阻塞TCP网络编程,它的核心是每个IO线程一个事件循环,把IO事件分发到回调函数上 陈硕先生编写muduo网络库的目的之一就是简化日常的TCP网络编程,让程序员能把精力集中在业务逻辑的实现上,而不要天天和Sockets API较劲。借用Brooks的话说(http://www.cs.nottac.uk/~cah/G51ISS/Documents/NoSilverBullet.html),原创 2020-06-29 11:50:12 · 1686 阅读 · 0 评论 -
muduo网络库:18---muduo简介之(muduo库的由来、编译安装、目录结构、代码结构、线程模型)
一、由来2010年3月我写了一篇《学之者生,用之者死——ACE历史与简 评》1,其中提到“我心目中理想的网络库”的样子: ·线程安全,原生支持多核多线程。 ·不考虑可移植性,不跨平台,只支持Linux,不支持Windows。 ·主要支持x86-64,兼顾IA32。(实际上muduo也可以运行在ARM 上。) ·不支持UDP,只支持TCP。 ·不支持IPv6,只支持IPv4。 ·不考虑广域网应...原创 2020-06-28 22:46:23 · 4641 阅读 · 1 评论 -
muduo网络库:17---高效的多线程日志之(多线程异步日志、其他方案)
本文内容衔接于前一篇文章(日志概述、功能需求、性能需求):https://blog.youkuaiyun.com/qq_41453285/article/details/105091022一、多线程中的日志安全多线程程序对日志库提出了新的需求:线程安全。即多个线程可以并发写日志,两个线程的日志消息不会出现交织 线程安全不难办到, 简单的办法是: 用一个全局mutex保护IO 或者每个线程单独写一...原创 2020-03-25 20:05:29 · 1668 阅读 · 0 评论 -
muduo网络库:16---高效的多线程日志之(日志概述、功能需求、性能需求)
一、日志概述“日志(logging)”有两个意思: 诊断日志(diagnostic log):即log4j、logback、slf4j、glog、 g2log、log4cxx、log4cpp、log4cplus、Pantheios、ezlogger等常用日志库 提供的日志功能 交易日志(transaction log):即数据库的write-ahead log(http://en.wi...原创 2020-03-25 12:16:41 · 1360 阅读 · 0 评论 -
muduo网络库:15---C++多线程编程精要之(RAII与fork()、多线程与fork()、多线程与signal)
本文内容衔接于前一篇文章(多线程与IO、用RAII包装文件描述符):https://blog.youkuaiyun.com/qq_41453285/article/details/105056920原创 2020-03-25 08:45:59 · 1246 阅读 · 0 评论 -
muduo网络库:14---C++多线程编程精要之(多线程与IO、用RAII包装文件描述符)
本文内容衔接于前一篇文章(线程的创建与销毁的守则):https://blog.youkuaiyun.com/qq_41453285/article/details/105047683、总结本专题未完结,参阅下一篇文章(RAII与fork()、多线程与fork()、多线程与signal):https://blog.youkuaiyun.com/qq_41453285/article/details/105056...原创 2020-03-24 22:41:29 · 1121 阅读 · 0 评论 -
muduo网络库:13---C++多线程编程精要之(线程的创建与销毁的守则)
本文内容衔接于前一篇文章(C/C++系统库的线程安全性):https://blog.youkuaiyun.com/qq_41453285/article/details/105047602、总结本专题未完结,参阅下一篇文章():原创 2020-03-24 21:16:54 · 1104 阅读 · 0 评论 -
muduo网络库:12---C++多线程编程精要之(C/C++系统库的线程安全性)
本文内容衔接于前一篇文章(基本线程原语的选用、Linux上的线程标识、善用__thread关键字、Linux新增系统调用的启示):https://blog.youkuaiyun.com/qq_41453285/article/details/105019401一、C/C++的线程库原先的C/C++标准(C89/C99/C++03)并没有涉及线程,新版的C/C++标准(C11和C++11)规定了程序在多线...原创 2020-03-23 20:23:48 · 1027 阅读 · 0 评论 -
muduo网络库:11---C++多线程编程精要之(基本线程原语的选用、Linux上的线程标识、善用__thread关键字、Linux新增系统调用的启示)
一、基本线程原语的选用我认为用C/C++编写跨平台(只针对POSIX操作系统)的多线程程序不是普遍的需求,因此我们只谈现代Linux(2004年Linux 2.6内核发布之后,NPTL线程库)下的多线程编程 POSIX threads的函数有110多个, 真正常用的不过十几个。而且在C++程序中通常会有更为易用的wrapper,不会直接调用Pthreads函数。这11个最基本的Pthread...原创 2020-03-23 14:13:40 · 969 阅读 · 0 评论 -
muduo网络库:10---多线程服务器之(“多线程服务器的适用场合”的例释与答疑)
本文内容衔接于前一篇文章(多线程服务器的适用场合):https://blog.youkuaiyun.com/qq_41453285/article/details/105005052原创 2020-03-21 22:30:15 · 1077 阅读 · 0 评论 -
muduo网络库:09---多线程服务器之(单线程、多线程服务器的适用场合)
本文内容衔接于前一篇文章(进程间通信只用TCP):https://blog.youkuaiyun.com/qq_41453285/article/details/104997453一、服务器开发概述“服务器开发”包罗万象,用一句话形容是:跑在多核机器上的Linux用户态的没有用户界面的长期运行(例如wget是不长期运行,httpd是长期运行的)的网络应用程序,通常是分布式系统的组成部件并发处理...原创 2020-03-21 14:09:30 · 1298 阅读 · 0 评论 -
muduo网络库:08---多线程服务器之(进程间通信只用TCP)
一、Linux下IPC、同步原语的种类Linux下进程间通信(IPC)的方式数不胜数,光《UNIX网络编程》列出的就有:匿名管道(pipe)、具名管道(FIFO)、POSIX消息队列、共享内存、信号(signals)等等,更不必说Sockets了 同步原语 (synchronization primitives)也很多,如互斥器(mutex)、条件变量 (condition variable...原创 2020-03-21 10:27:50 · 1135 阅读 · 0 评论 -
muduo网络库:07---多线程服务器之(单线程服务器、多线程服务器的常用编程模型)
一、进程与线程进程进程(process)”是操作里最重要的两个概念之一(另一个是文件),粗略地讲,一个进程是“内存中正在运行的程序” 每个进程有自己独立的地址空间(address space),“在同一个进程”还是“不在同一个进程”是系统功能划分的重要决策点。《Erlang程序设计》[ERL]把“进程”比喻为“人”,我觉得十分精当,为我们提供了一个思考的框架 每个人有自己的记忆(me...原创 2020-03-21 09:53:18 · 1121 阅读 · 1 评论 -
muduo网络库:06---线程同步精要之(借shared_ptr实现copy-on-write)
本文内容衔接于前一篇文章(线程安全的Singleton实现):https://blog.youkuaiyun.com/qq_41453285/article/details/104875213原创 2020-03-21 09:27:40 · 1285 阅读 · 2 评论 -
muduo网络库:05---线程同步精要之(线程安全的Singleton实现)
本文内容衔接于前一篇文章(封装MutexLock、MutexLockGuard、Condition):https://blog.youkuaiyun.com/qq_41453285/article/details/104875213待续原创 2020-03-18 22:53:24 · 922 阅读 · 0 评论 -
muduo网络库:04---线程同步精要之(封装MutexLock、MutexLockGuard、Condition)
本文内容衔接于前一篇文章(互斥器、条件变量、读写锁、信号量、sleep):https://blog.youkuaiyun.com/qq_41453285/article/details/104859230 MutexLock、MutexLockGuard、Condition等class完整代码在muduo/base中都可以找到,这几个class都不允许拷贝构造和赋值一、MutexLock、MutexLoc...原创 2020-03-15 20:55:44 · 1115 阅读 · 0 评论 -
muduo网络库:03---线程同步精要之(互斥器、条件变量、读写锁、信号量、sleep)
并发编程有两种基本模型:一种是message passing,另一种是shared memory 在分布式系统中,运行在多台机器上的多个进程的并行编程只有一种实用模型:message passing 在单机上,我们也可以照搬message passing作为多个进程的并发模型 这样整个分布式系统的架构的一致性很强,扩容(scale out)起来也较容易 在多线程编程中, messag...原创 2020-03-15 11:10:44 · 1414 阅读 · 0 评论 -
muduo网络库:02---线程安全的对象生命期管理之(以智能指针替换原始指针:内含Observer模式、对象池(弱回调)等演示案例)
本文内容衔接于前一篇文章(多线程中对象的构造与析构):https://blog.youkuaiyun.com/qq_41453285/article/details/104720277一、线程安全的Observer有多难一个动态创建的对象是否还活着,光看指针是看不出来的(引用也一样看不出来): 指针就是指向了一块内存,这块内存上的对象如果已经销毁,那么就根本不能访问(《C++编程规范》条款99)(就...原创 2020-03-13 17:28:46 · 1506 阅读 · 1 评论 -
muduo网络库:01---线程安全的对象生命期管理之(多线程中对象的构造与析构)
编写线程安全的类不是难事,用同步原语保护内部状态即可。但是对象的生与死不能由对象自身拥有与的mutex(互斥器)来保护 如何避免对象析构时可能存在的race condition(竞态条件)是C++多线程编程面临的基本问题,可以借助Boost库中的shared_ptr和weak_ptr完美解决。这也是实现线程安全的Observer模式的必备技术一、当析构函数遇到多线程 与其他面向对象语言不...原创 2020-03-09 09:42:59 · 1616 阅读 · 0 评论