![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
muduo源码阅读
文章平均质量分 73
哞哞哞咩咩咩
记录日常学习
展开
-
muduo参考博客
muduo网络库学习(三)定时器TimerQueue的设计Muduo网络库源码分析(四)EventLoopThread和EventLoopThreadPool的封装原创 2021-02-23 21:52:26 · 132 阅读 · 0 评论 -
muduo源码阅读(9): EventLoop事件循环相关类
参考: Muduo网络库源码分析(一) EventLoop事件循环(Poller和Channel)(一)TCP网络编程的本质:三个半事件1.连接的建立,包括服务端接受(accept) 新连接和客户端成功发起(connect) 连接。TCP 连接一旦建立,客户端和服务端是平等的,可以各自收发数据。2.连接的断开,包括主动断开(close 或shutdown) 和被动断开(read(2) 返回0)。3.消息到达,文件描述符可读。这是最为重要的一个事件,对它的处理方式决定了网络编程的风格(阻塞还是非阻塞,原创 2021-02-18 17:23:33 · 232 阅读 · 0 评论 -
muduo源码阅读(7):ThreadLocal类和ThreadLocalSingleton类
1.ThreadLocal类要点(1)了解线程特定数据在单线程程序中,我们经常要用到“全局变量”以实现多个函数间共享数据。在多线程环境下,由于数据空间是共享的,因此全局变量也为所有线程所共有。但有时应用程序设计中有必要提供线程私有的全局变量,仅在某个线程中有效,但却可以跨多个函数访问。POSIX线程库通过维护一定的数据结构来解决这个问题,这个数据称为Thread-specific Data或 TSD。线程特定数据也称为线程本地存储TLS(Thread-local storage)。对于POD类型的线原创 2021-02-07 23:33:19 · 172 阅读 · 0 评论 -
muduo源码阅读(6):Singleton类
要点:参考:https://blog.csdn.net/Leeds1993/article/details/52209392(1)了解单例模式实际应用中,有些对象,我们只需要一个就可以了,比如,一台计算机上可以连好几个打印机,但是这个计算机上的打印程序只能有一个,这里就可以通过单例模式来避免两个打印作业同时输出到打印机中,即在整个的打印过程中只有一个打印程序的实例。单例模式是一种常用的软件设计模式。在它的核心结构中只包含一个被称为单例的特殊类。通过单例模式可以保证系统中一个类只有一个实例。(2)p原创 2021-02-05 23:14:13 · 77 阅读 · 0 评论 -
muduo源码阅读(5):BlockingQueue, BoundedBlockingQueue和ThreadPool类
1.了解生产者-消费者问题生产者-消费者问题也被称为有界缓冲区问题,两个进程/线程共享一个公共的固定大小的缓冲区。其中一个是生产者,将信息放入缓冲区;另一个是消费者,从缓冲区中取出信息。问题在于当缓冲区已满,而此时生产者还想向其中放入一个新的数据项的情况。其解决方法就是让生产者休眠,待消费者从缓冲区中取出一个或多个数据项时再唤醒它。同样地,当消费者试图从缓冲区中取数据而发现缓冲区为空时,消费者就休眠,直到生产者向其中放入一些数据时再将其唤醒。2.无界缓冲BlockingQueue.h#ifndef原创 2021-02-05 22:03:45 · 160 阅读 · 1 评论 -
muduo源码阅读(4):Mutex相关类, Condition类和CountDownLatch类
muduo中对互斥量和条件变量的操作基本上都是调用它们对应的相关函数来实现的。例如MutexLock::lock()即调用pthread_mutex_lock(),Condition::wait()即调用pthread_cond_wait()等等原创 2021-02-04 21:38:27 · 113 阅读 · 0 评论 -
muduo源码阅读(3): Thread类
变量numCreated_表示创建的线程个数,类型为AtomicInt32,用到了我们上篇所说的原子性操作。Thread类中还用到了CurrentThread命名空间的变量和函数。以下要点参考:https://blog.csdn.net/Leeds1993/article/details/52156322(1)线程标识符Linux中,每个进程有一个pid,类型为pid_t,由getpid()取得。Linux下的POSIX线程也有一个id,类型为pthread_t,由pthread_self()取得,原创 2021-01-21 15:34:47 · 144 阅读 · 0 评论 -
muduo源码阅读(2): AtomicIntegerT类
所谓原子操作是指不会被线程调度机制打断的操作,这种操作一旦开始,就一直运行到结束,中间不会有任何 context switch (切换到另一个线程)。在多进程(线程)访问资源时,能够确保所有其他的进程(线程)都不在同一时间内访问相同的资源。C/C++ 中数值操作,如自加 (n++) 自减 (n- -) 及赋值 (n=2) 操作都不是原子操作。如果多线程程序需要使用全局计数器,程序就需要使用锁或者互斥量保证操作的安全性,对于较高并发的程序,这种做法会造成一定的性能瓶颈。代码的几个要点:(1)gcc提供的原创 2021-01-20 00:30:42 · 107 阅读 · 0 评论 -
muduo源码阅读(1): Timestamp类
代码的几个要点:(1)Timestamp类继承自boost::less_than_comparable 模板类只要实现 <,即可自动实现>,<=,>=(2)使用到了BOOST_STATIC_ASSERT,编译时断言(3)gmtime和gmtime_r函数(4)函数参数采用值传递(5)使用PRId64(6)对象语义和值语义参考文章(详细介绍以上要点): https://blog.csdn.net/leeds1993/article/details/52117078#com原创 2021-01-18 11:33:31 · 86 阅读 · 0 评论