会员
周边
众包
新闻
博问
闪存
HarmonyOS
Chat2DB
所有博客
当前博客
我的博客
我的园子
账号设置
会员中心
简洁模式
...
退出登录
注册
登录
明明1109
博客园
首页
新随笔
联系
订阅
管理
上一页
1
···
8
9
10
11
12
13
14
15
16
···
25
下一页
2022年3月13日
muduo笔记 网络库(四)TimerQueue定时器队列
摘要: 目录timerfd简要介绍定时功能相关类Timer类TimerId类TimerQueue类TimerQueue声明TimerQueue构造函数TimerQueue析构TimerQueue重要接口addTimer 添加定时器cancel 取消定时器handleRead处理TimerQueue上所有超时
阅读全文
posted @ 2022-03-13 20:33 明明1109
阅读(1367)
评论(0)
推荐(2)
2022年3月12日
muduo笔记 网络库(一)概括
摘要: 目录网络事件处理模式Reactor模式Proactor模式muoduo中的Reactor模式参考 网络事件处理模式 服务器编程中,通常有两种高效的事件处理模式:reactor模式,proactor模式。 Reactor模式 要求主线程(I/O单元)只负责监听文件描述符上是否有事件发生,有的话就立即将
阅读全文
posted @ 2022-03-12 19:58 明明1109
阅读(661)
评论(0)
推荐(0)
muduo笔记 网络库(三)事件通道Channel
摘要: 目录Channel 类Channel类声明handleEvent 处理事件handleEventWithGuard 识别事件并回调update 更新通道remove 移除通道参考 Poller的存在,是为了监听事件,但具体监听什么事件呢? 这就需要用到Channel类。一个Channel对象绑定了一
阅读全文
posted @ 2022-03-12 16:54 明明1109
阅读(1064)
评论(0)
推荐(1)
muduo笔记 网络库(二)I/O复用封装Poller
摘要: 目录Poller类派生类EPollPoller派生类PollPoller I/O复用使得程序能同时监听多个文件描述符,能有效提高程序性能。Linux下,实现I/O复用的系统调用主要有3个: 1)select(2);2)poll(2);3)epoll(7)。 muduo采用了2)和3),分别用Poll
阅读全文
posted @ 2022-03-12 16:40 明明1109
阅读(771)
评论(0)
推荐(0)
2022年3月8日
muduo笔记 线程池ThreadPool
摘要: 目录线程池模型线程池的组成ThreadPool接口ThreadPool实现数据成员线程池的构造启动与停止往工作队列加入任务对象从工作队列取任务对象子线程loopThreadPool的使用、测试小结参考 muduo线程池ThreadPool,采用的是固定线程数目的线程池方案。 线程池模型 模型图如下:
阅读全文
posted @ 2022-03-08 11:44 明明1109
阅读(1233)
评论(0)
推荐(1)
2022年3月7日
muduo笔记 日志库(二)
摘要: 目录后端AsyncLogging类数据成员LargeBuffer 存放大量log消息后端线程 异步写数据到log文件LogFile类构造函数滚动日志文件日志文件名写日志文件操作flush日志文件AppendFile类数据结构RAII方式打开、关闭文件写数据到文件使用异步日志小结参考 前半部分mudu
阅读全文
posted @ 2022-03-07 16:58 明明1109
阅读(1915)
评论(4)
推荐(2)
2022年3月6日
muduo笔记 日志库(一)
摘要: 目录日志库模型前端Logger类日志等级类型LogLevel用户接口构造函数输出位置,冲刷日志日志等级,时区析构函数Impl类Impl的数据结构Impl构造函数LogStream类实现Small Buffer存放log消息operator<<格式化数据staticCheck()静态检查小结 后半部分
阅读全文
posted @ 2022-03-06 22:45 明明1109
阅读(3416)
评论(4)
推荐(2)
2022年2月28日
muduo笔记 线程类Thread,当前线程CurrentThread
摘要: 目录线程类Thread要解决的问题封装线程类ThreadThread 接口Thread 实现内部类ThreadData当前线程CurrentThreadcacheTid()获取当前线程tidisMainThread()判断调用线程是否为main线程sleepUsec() 休眠指定微秒数ThreadN
阅读全文
posted @ 2022-02-28 21:30 明明1109
阅读(803)
评论(5)
推荐(0)
muduo笔记 线程同步CountDownLatch
摘要: 目录多线程同步中的问题CountDownLatchCountDownLatch的接口CountDownLatch的实现barrier实现线程同步barrier与自定义CountDownLatch区别参考 多线程同步中的问题 多线程环境中,常有这样一种同步情况:一个线程等待其他所有线程完成指定工作。
阅读全文
posted @ 2022-02-28 11:22 明明1109
阅读(429)
评论(0)
推荐(0)
2022年2月27日
muduo笔记 线程安全相关类MutexLock, MutexLockGuard
摘要: 目录互斥锁mutex的选择MutexLock类MutexLockGuard类测试 互斥锁mutex的选择 互斥锁mutex有2种方案: 1)C++11以后,使用std::mutex,当然,特殊应用场景下,也有另外三种:std::recursive_mutex(递归mutex类),std::timed
阅读全文
posted @ 2022-02-27 23:36 明明1109
阅读(835)
评论(0)
推荐(0)
muduo笔记 标记类copyable, noncopyable
摘要: 目录值语义与引用语义如何为一个class实现值语义,引用语义?定义标记class,标明对象拷贝性copyable classnoncopyable classcopyable及noncopyable应用阻止copy操作 值语义与引用语义 值语义指的是对象的拷贝与元对象无关,就像拷贝int一样。C++
阅读全文
posted @ 2022-02-27 21:01 明明1109
阅读(384)
评论(0)
推荐(0)
muduo笔记 原子类AtomicIntegerT<T>
摘要: 目录原子操作AtomicIntegerT<T>模板类单元测试知识点gcc原子操作volatile关键字参考 原子操作 C++中的两种原子操作的方案: 1)C++11以后,提供std::atomic<T>实现T类型数据的原子操作,主要包括:初始化、读取值、写值、自增自减(i.e. 前置或后置++)等。
阅读全文
posted @ 2022-02-27 20:44 明明1109
阅读(459)
评论(0)
推荐(0)
muduo笔记 时间戳类Timestamp
摘要: 如何度量程序在某一时刻的时间? 通常,我们用时刻来表示,比如"2022-02-26 23:43:00.000000",这种方式便于人查看,但不便于程序中的比较和计算。比如有2个时刻A和B,计算哪个时刻在前,哪个在后,或者要计算时刻A和B的时间差时,这种字符串表示方式就很麻烦。 我们想到将字符串形式的
阅读全文
posted @ 2022-02-27 20:16 明明1109
阅读(1036)
评论(0)
推荐(0)
2022年2月24日
Linux 线程局部存储
摘要: Linux有2种方法可以实现线程局部存储: 1)使用NTPL提供的函数; 2)使用编译器扩展的__thread关键字。 NPTL(Native POSIX Thread Library),顾名思义,本地POSIX线程库。 1. 使用NPTL库函数实现线程局部存储 NPTL提供实现线程局部存储功能的接
阅读全文
posted @ 2022-02-24 23:24 明明1109
阅读(468)
评论(0)
推荐(0)
Linux 获取线程id
摘要: 目录 Linux中,我们知道getpid(2) 可以获取调用进程的pid,那么如何获取一个线程的id呢? 1)系统调用gettid(2)获取内核中的线程id ; 2)POSIX线程库提供的pthread_self(3)方法获取分配的线程id; 3)C++11 std::thread的get_id()
阅读全文
posted @ 2022-02-24 10:22 明明1109
阅读(8016)
评论(0)
推荐(0)
2022年2月21日
C++ Primer学习笔记 - 第16章 模板与泛型编程(二)
摘要: 上半部分,见C++ Primer学习笔记 - 第16章 模板与泛型编程(一) 16.3 重载与模板 函数模板可以被另一个模板或普通非模板函数重载。跟普通函数重载一样,名字相同的函数必须具有不同数量或类型的参数。 如果涉及到函数模板,则函数匹配规则会在下面几个方面受到影响: 对于一个调用,其候选函数包
阅读全文
posted @ 2022-02-21 22:42 明明1109
阅读(112)
评论(0)
推荐(0)
2022年2月15日
IPv6 scope id
摘要: 在查看<netinet/in.h>中sockaddr_in6代码时,发现有一个成员sin6_scope_id,表示IPv6 scope-id。而在sockaddr_in中是没有该成员的。 那么,这个成员是干什么的呢? 要讨论这个问题,先看一下IPv6的基础知识:IPv6地址分类及表示法。 IPv6地
阅读全文
posted @ 2022-02-15 23:38 明明1109
阅读(3175)
评论(0)
推荐(0)
Linux 解码backtrace返回信息
摘要: 前一节Linux backtrace()系列函数 ,已经知道可以通过backtrace,backtrace_symbols得到函数的调用栈信息。不过,在C++中,得到的是一堆难以识别的符号,如何解码得到准确的函数名信息? 如,前面得到的函数调用栈信息: $ ./backtrace 2 backtra
阅读全文
posted @ 2022-02-15 12:21 明明1109
阅读(397)
评论(0)
推荐(0)
Linux backtrace()系列函数
摘要: backtrace()系列函数 backtrace()系列函数有3个:backtrace,backtrace_symbols,backtrace_symbols_fd。主要用于应用程序反调试(self-debugging)。 参见man 3 BACKTRACE,3个函数原型: #include <e
阅读全文
posted @ 2022-02-15 00:22 明明1109
阅读(4880)
评论(0)
推荐(0)
2022年2月14日
C++ Primer学习笔记 - 第18章 用于大型程序的工具
摘要: 18.1 异常处理 异常处理(exception handling)机制,允许程序中独立开发的部分能够在运行时就出现的问题进行通信,并做出相应的处理。 异常使得我们能将问题的检测和解决过程分离开,传统C语言异常处理必须对每个函数返回的异常作处理,也就是检测和解决过程捆绑在一起。 这样做的优势在于:
阅读全文
posted @ 2022-02-14 16:42 明明1109
阅读(90)
评论(0)
推荐(0)
上一页
1
···
8
9
10
11
12
13
14
15
16
···
25
下一页
公告