上一页 1 ··· 5 6 7 8 9 10 11 12 13 ··· 22 下一页
摘要: 目录Channel 类Channel类声明handleEvent 处理事件handleEventWithGuard 识别事件并回调update 更新通道remove 移除通道参考 Poller的存在,是为了监听事件,但具体监听什么事件呢? 这就需要用到Channel类。一个Channel对象绑定了一 阅读全文
posted @ 2022-03-12 16:54 明明1109 阅读(821) 评论(0) 推荐(1) 编辑
摘要: 目录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 阅读(560) 评论(0) 推荐(0) 编辑
摘要: 目录线程池模型线程池的组成ThreadPool接口ThreadPool实现数据成员线程池的构造启动与停止往工作队列加入任务对象从工作队列取任务对象子线程loopThreadPool的使用、测试小结参考 muduo线程池ThreadPool,采用的是固定线程数目的线程池方案。 线程池模型 模型图如下: 阅读全文
posted @ 2022-03-08 11:44 明明1109 阅读(900) 评论(0) 推荐(1) 编辑
摘要: 目录后端AsyncLogging类数据成员LargeBuffer 存放大量log消息后端线程 异步写数据到log文件LogFile类构造函数滚动日志文件日志文件名写日志文件操作flush日志文件AppendFile类数据结构RAII方式打开、关闭文件写数据到文件使用异步日志小结参考 前半部分mudu 阅读全文
posted @ 2022-03-07 16:58 明明1109 阅读(1504) 评论(4) 推荐(2) 编辑
摘要: 目录日志库模型前端Logger类日志等级类型LogLevel用户接口构造函数输出位置,冲刷日志日志等级,时区析构函数Impl类Impl的数据结构Impl构造函数LogStream类实现Small Buffer存放log消息operator<<格式化数据staticCheck()静态检查小结 后半部分 阅读全文
posted @ 2022-03-06 22:45 明明1109 阅读(2543) 评论(4) 推荐(2) 编辑
摘要: 目录线程类Thread要解决的问题封装线程类ThreadThread 接口Thread 实现内部类ThreadData当前线程CurrentThreadcacheTid()获取当前线程tidisMainThread()判断调用线程是否为main线程sleepUsec() 休眠指定微秒数ThreadN 阅读全文
posted @ 2022-02-28 21:30 明明1109 阅读(605) 评论(5) 推荐(0) 编辑
摘要: 目录多线程同步中的问题CountDownLatchCountDownLatch的接口CountDownLatch的实现barrier实现线程同步barrier与自定义CountDownLatch区别参考 多线程同步中的问题 多线程环境中,常有这样一种同步情况:一个线程等待其他所有线程完成指定工作。 阅读全文
posted @ 2022-02-28 11:22 明明1109 阅读(308) 评论(0) 推荐(0) 编辑
摘要: 目录互斥锁mutex的选择MutexLock类MutexLockGuard类测试 互斥锁mutex的选择 互斥锁mutex有2种方案: 1)C++11以后,使用std::mutex,当然,特殊应用场景下,也有另外三种:std::recursive_mutex(递归mutex类),std::timed 阅读全文
posted @ 2022-02-27 23:36 明明1109 阅读(680) 评论(0) 推荐(0) 编辑
摘要: 目录值语义与引用语义如何为一个class实现值语义,引用语义?定义标记class,标明对象拷贝性copyable classnoncopyable classcopyable及noncopyable应用阻止copy操作 值语义与引用语义 值语义指的是对象的拷贝与元对象无关,就像拷贝int一样。C++ 阅读全文
posted @ 2022-02-27 21:01 明明1109 阅读(240) 评论(0) 推荐(0) 编辑
摘要: 目录原子操作AtomicIntegerT<T>模板类单元测试知识点gcc原子操作volatile关键字参考 原子操作 C++中的原子操作: 1)C++11以后,提供st::atomic<T>可以实现T类型数据的原子操作,主要包括:初始化、读取值、写值、自增自减(i.e. 前置或后置++)等。 2)对 阅读全文
posted @ 2022-02-27 20:44 明明1109 阅读(335) 评论(0) 推荐(0) 编辑
摘要: 如何度量程序在某一时刻的时间? 通常,我们用时刻来表示,比如"2022-02-26 23:43:00.000000",这种方式便于人查看,但不便于程序中的比较和计算。比如有2个时刻A和B,计算哪个时刻在前,哪个在后,或者要计算时刻A和B的时间差时,这种字符串表示方式就很麻烦。 我们想到将字符串形式的 阅读全文
posted @ 2022-02-27 20:16 明明1109 阅读(817) 评论(0) 推荐(0) 编辑
摘要: Linux有2种方法可以实现线程局部存储: 1)使用NTPL提供的函数; 2)使用编译器扩展的__thread关键字。 NPTL(Native POSIX Thread Library),顾名思义,本地POSIX线程库。 1. 使用NPTL库函数实现线程局部存储 NPTL提供实现线程局部存储功能的接 阅读全文
posted @ 2022-02-24 23:24 明明1109 阅读(307) 评论(0) 推荐(0) 编辑
摘要: Linux中,我们知道getpid(2) 可以获取调用进程的pid,那么如何获取一个线程的id呢? 可以用系统调用gettid(2)获取内核中的线程id ,POSIX线程库提供的pthread_self(3)方法获取分配的线程id。C++11 std::thread的get_id()方法,封装的也是 阅读全文
posted @ 2022-02-24 10:22 明明1109 阅读(6914) 评论(0) 推荐(0) 编辑
摘要: 上半部分,见C++ Primer学习笔记 - 第16章 模板与泛型编程(一) 16.3 重载与模板 函数模板可以被另一个模板或普通非模板函数重载。跟普通函数重载一样,名字相同的函数必须具有不同数量或类型的参数。 如果涉及到函数模板,则函数匹配规则会在下面几个方面受到影响: 对于一个调用,其候选函数包 阅读全文
posted @ 2022-02-21 22:42 明明1109 阅读(83) 评论(0) 推荐(0) 编辑
摘要: 在查看<netinet/in.h>中sockaddr_in6代码时,发现有一个成员sin6_scope_id,表示IPv6 scope-id。而在sockaddr_in中是没有该成员的。 那么,这个成员是干什么的呢? 要讨论这个问题,先看一下IPv6的基础知识:IPv6地址分类及表示法。 IPv6地 阅读全文
posted @ 2022-02-15 23:38 明明1109 阅读(2470) 评论(0) 推荐(0) 编辑
摘要: 前一节Linux backtrace()系列函数 ,已经知道可以通过backtrace,backtrace_symbols得到函数的调用栈信息。不过,在C++中,得到的是一堆难以识别的符号,如何解码得到准确的函数名信息? 如,前面得到的函数调用栈信息: $ ./backtrace 2 backtra 阅读全文
posted @ 2022-02-15 12:21 明明1109 阅读(315) 评论(0) 推荐(0) 编辑
摘要: backtrace()系列函数 backtrace()系列函数有3个:backtrace,backtrace_symbols,backtrace_symbols_fd。主要用于应用程序反调试(self-debugging)。 参见man 3 BACKTRACE,3个函数原型: #include <e 阅读全文
posted @ 2022-02-15 00:22 明明1109 阅读(3508) 评论(0) 推荐(0) 编辑
摘要: 18.1 异常处理 异常处理(exception handling)机制,允许程序中独立开发的部分能够在运行时就出现的问题进行通信,并做出相应的处理。 异常使得我们能将问题的检测和解决过程分离开,传统C语言异常处理必须对每个函数返回的异常作处理,也就是检测和解决过程捆绑在一起。 这样做的优势在于: 阅读全文
posted @ 2022-02-14 16:42 明明1109 阅读(70) 评论(0) 推荐(0) 编辑
摘要: 题目来源:01背包 | 牛客网 描述 已知一个背包最多能容纳体积之和为v的物品。现有 n 个物品,第 i 个物品的体积为 vi , 重量为 wi。求当前背包最多能装多大重量的物品? 数据范围: 1≤v≤1000,1≤n≤1000,1≤n≤1000 , 1≤vi≤1000, 1≤wi≤1000 进阶: 阅读全文
posted @ 2022-02-13 23:55 明明1109 阅读(64) 评论(0) 推荐(0) 编辑
摘要: timerfd特点 timerfd的特点是将时间变成一个文件描述符,定时器超时时,文件可读。这样就能很容易融入select(2)/poll(2)/epoll(7)的框架中,用统一的方式来处理IO事件、超时事件。这也是Reactor模式的特点。 timerfd定时器与传统Reactor模式定时器 传统 阅读全文
posted @ 2022-02-12 13:39 明明1109 阅读(3464) 评论(0) 推荐(2) 编辑
上一页 1 ··· 5 6 7 8 9 10 11 12 13 ··· 22 下一页