- 博客(30)
- 收藏
- 关注
原创 condition类的设计——muduo源码分析
muduo封装的条件变量,直接使用了Mutex.h依然是RAII的设计,注意在使用wait()的时候要while循环。pthread_cond_signal在多处理器上可能同时唤醒多个线程,当你只能让一个线程处理某个任务时,其它被唤醒的线程就需要继续wait,,而且规范要求pthread_cond_signal至少唤醒一个pthread_cond_wait上的线程,其实有些实现为了简单在单处理器上也会唤醒多个线程。pthread_cond_broadcast唤醒全部线程,但我们通常只需要一部分线程去
2021-05-27 23:03:58 154
原创 EventLoopThreadPool类解析——muduo源码分析
创建了EventLoopThread线程池,然后把回调函数注册进去了。采用roundrobin的方式往里添加新的连接,如果线程池大小为0,则在baseloop回调。EventLoopThreadPool.h#ifndef MUDUO_NET_EVENTLOOPTHREADPOOL_H#define MUDUO_NET_EVENTLOOPTHREADPOOL_H#include "muduo/base/noncopyable.h"#include "muduo/base/Types.h"#in
2021-05-22 11:33:03 108
原创 EventLoopThread类解析——muduo源码分析
我认为看源码的一个比较好的顺序:从.h里面看成员变量,看看这个类到底持有那些成员变量,再从.cc里面去看成员函数的作用,从构造和析构中去看懂哪些对象的生命周期归该类控制。但是muduo的EventLoopThread实现为自动销毁的。一般loop函数退出整个程序就退出了,所以muduo库的线程池就是启动时分配,并没有释放。所以线程结束一般来说就是整个程序结束。EventLoopThread在threadFunc中创建了栈上EventLoop loop,threadFunc在构造时与Thread绑定。E
2021-05-22 10:46:50 247 1
原创 EventLoop类解析——muduo源码分析
EventLoop会在构造函数中创建一个poller对象,创建一个TimerQueue和WakeUpChannel,WakeUpChannel仅用于存放eventfd,用于异步唤醒,调用DoPendingFunctors()。通过t_loopInThisThread保证one loop per thread。事件循环运行的核心步骤:1、清空activechannel2、调用poll返回activechannel3、处理activechannel中的事件4、doPendingFunctors()
2021-05-21 21:34:16 257
原创 Channel类解析——muduo源码分析
Channel是一个内部类,仅供整个网络内部使用,不暴露对外的接口。该类为的主要作用是管理文件描述符,但是它不拥有文件描述符,文件描述符的析构工作不由它管理。一个Channel只管理一个文件描述符。作用:管理一个文件描述符,其可读可写事件以及在pollfd中的位置index()。在处理事件之前会用weak_ptr检测对象是否存在#ifndef MUDUO_NET_CHANNEL_H#define MUDUO_NET_CHANNEL_H#include "muduo/base/noncopyable
2021-05-20 21:35:23 238
原创 TcpServer类解析——muduo源码分析
该Evenloop运行在主线程,仅用于监听客户端的建立连接请求,不负责监听TcpConnection。该EventloopThread不从EventloopThreadPool中取。TcpServer中有一个线程池,大小固定不支持动态扩容。#ifndef MUDUO_NET_TCPSERVER_H#define MUDUO_NET_TCPSERVER_H#include "muduo/base/Atomic.h"#include "muduo/base/Types.h"#include "mud
2021-05-20 20:36:06 226
原创 Acceptor类解析——muduo源码分析
注释都放在代码里了,Acceptor.h#ifndef MUDUO_NET_ACCEPTOR_H#define MUDUO_NET_ACCEPTOR_H#include <functional>#include "muduo/net/Channel.h"#include "muduo/net/Socket.h"namespace muduo{namespace net{class EventLoop; //前向声明,头文件不需要重复包含class InetAdd
2021-05-19 20:18:46 149
原创 智能指针、容器、迭代器的一些常见问题总结
最近在coding的时候在使用迭代器时遇到了一些的问题,都是因为自己理解不当造成的。总结几点分享给大家避免重复踩坑~
2020-11-26 16:48:38 646
原创 RTTI—运行时类型识别
在存在虚函数表的继承关系时,每个虚函数表前面都设置有一个type_info指针,用于支持RTTI,RTTI是为多态而生成的信息,包括对象继承关系,对象本身的描述等,只有具有虚函数的对象才会生成。
2020-11-18 16:43:36 236
原创 图解虚函数的内存模型和继承方式,虚函数表指针、虚函数表、多继承、多重继承、菱形继承、虚继承
虚函数、虚函数表指针、虚函数表、多级继承、多重继承、菱形继承
2020-10-29 22:49:02 1980 10
原创 声网日常实习C++笔试题:求数组的最大公约数
题目描述:Let’s consider all in the range from 1 to n(inclusive).Among all pairs of distinct integers in this range, find the maximum possible greatest common divisor of integers in pair. Formally, find the maximum value of gcd(a ,b), where 1 ≤\leq≤ a ≤\leq≤
2020-10-23 15:58:43 962
原创 腾讯TEG日常实习,c++后台开发一面
腾讯C++后台开发实习的一面面经,分别根据C++、计算机网络、操作系统、算法和项目进行提问,需要对这些基础知识有比较好的理解。
2020-10-22 22:07:25 1195 11
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人