摘要: 简介 在实际开发中,为了节约系统资源,有时需要确保系统中某个类只有唯一一个实例,当这个唯一实例创建成功之后,无法再创建一个同类型的其他对象,所有的操作都只能基于这个唯一实例。为了确保对象的唯一性,可以通过单例模式来实现,这就是单例模式的动机所在。 单例模式的定义:确保某一个类只有一个实例,而且自行实 阅读全文
posted @ 2022-10-20 17:58 Leaos 阅读(44) 评论(0) 推荐(0) 编辑
摘要: UML图示简介 在 UML 中,类使用包含类名、属性和操作且带有分割线的长方形来表示,如图所示,定义一个 Student 类,它包含属性 name、age 和 id,以及操作 modifyInfo()。 其对应的 C++ 代码片段如下: class Student { public: void mo 阅读全文
posted @ 2022-10-20 15:13 Leaos 阅读(289) 评论(0) 推荐(0) 编辑
摘要: Buffer 类的设计是一种应用层的输入输出缓冲技术。对于 Non-blocking IO 来说,其核心思想是避免阻塞在 read() 或 write() 或其他的 IO 系统调用上,这样就可以最大限度地复用 thread of control,让一个线程能够服务于多个 socket 连接。IO 线 阅读全文
posted @ 2022-10-19 15:20 Leaos 阅读(286) 评论(0) 推荐(0) 编辑
摘要: Endian Endian.h 是一个公共头文件,里面包含了一些网络字节序和主机字节序相互转换的问题。 其中所使用的方法如下: // XX 位主机转网络 uint64_t htobe64(uint64_t data); uint32_t htobe32(uint32_t data); uint16_ 阅读全文
posted @ 2022-10-19 15:14 Leaos 阅读(67) 评论(0) 推荐(0) 编辑
摘要: Thread 在 Thread.cc 中,有一个 ThreadNameInitializer 类,用于线程环境初始化操作: void afterFork() { muduo::CurrentThread::t_cachedTid = 0; muduo::CurrentThread::t_thread 阅读全文
posted @ 2022-10-16 15:59 Leaos 阅读(170) 评论(0) 推荐(0) 编辑
摘要: 在并发编程中,常常需要用到线程安全的队列。常见的线程安全队列的设计分为两种: 阻塞队列:常用于生产者和消费者的场景,其中,生产者存放元素,而消费者获取元素。常用的实现方法是在入队和出队时使用同一把锁,或者入队和出队使用不同的两把锁。 非阻塞队列:与阻塞队列不同,非阻塞队列在队列为空时获取元素会直接返 阅读全文
posted @ 2022-10-15 13:26 Leaos 阅读(118) 评论(0) 推荐(0) 编辑
摘要: 该框架中的日志为诊断日志,用于将代码运行时的重要信息进行保存,方便故障诊断和追踪。日志通常分为如下两种: 同步日志:当需要写出一条日志消息时,只有等到这条日志消息完全写出时才能执行后续的程序,其问题在于可能会阻塞在磁盘写操作上; 异步日志:当需要写日志消息时,只是将日志消息进行存储,当积累到一定量时 阅读全文
posted @ 2022-10-15 10:21 Leaos 阅读(733) 评论(0) 推荐(2) 编辑
摘要: Atomic 在 Atomic.h 文件中定义了原子操作类类型 AtomicIntegerT<T>,它使用了 GCC 内置的原子操作来实现。 原子操作在多线程开发中经常用到,比如计数器、序列产生器等。这些情况下数据有并发的危险,但是用锁去保护又显得有些浪费,会造成一定的性能瓶颈,而原子操作则更为节省 阅读全文
posted @ 2022-10-14 16:40 Leaos 阅读(124) 评论(0) 推荐(0) 编辑
摘要: WeakCallback 在 WeakCallback.h 文件中定义了模板类 WeakCallback,在其模板参数中,有一个可变模板参数 ARGS,用以指示回调函数的参数。 在类内部,定义有两个成员变量,分别是 object_ 和 function_。 成员变量 object_ 是一个弱指针类型 阅读全文
posted @ 2022-10-14 13:57 Leaos 阅读(141) 评论(0) 推荐(1) 编辑
摘要: ProcessInfo 在 ProcessInfo.h 文件中,存在一个命名空间 ProcessInfo,其中声明了大部分进程需要使用到相关信息的函数,比如进程的 PID、UID、EUID,主机名,进程状态,程状态等等。 在 ProcessInfo.cc 的 detail 命名空间定义了如下几个函数 阅读全文
posted @ 2022-10-14 13:53 Leaos 阅读(55) 评论(0) 推荐(0) 编辑