Scott Young's advice
1. Excellent feeling how 找到相对不错的大类 优秀分析,为什么,那一块最优 定下优秀计划,从不错到优秀 如果都很垃圾 细化1到小类模块 做计划,把这个模块做到优秀 2. daily plan check in Streak:连续不中断的每日打卡。 在日程本记下每天准备做的事情 每天完成后打一个勾子,或者画个记号。 ...
1. Excellent feeling how 找到相对不错的大类 优秀分析,为什么,那一块最优 定下优秀计划,从不错到优秀 如果都很垃圾 细化1到小类模块 做计划,把这个模块做到优秀 2. daily plan check in Streak:连续不中断的每日打卡。 在日程本记下每天准备做的事情 每天完成后打一个勾子,或者画个记号。 ...
timer的设计在linux下看起来是通用的,大部分都是用的timerfd() + 一个数据结构维护timers的到期时间,其中timerfd是最小的超时时间(expiration) 以muduo为例看一下, 大多数的io库在linux上的处理都是类似的 接口 // timers /// /// Runs callback at 'time'. /// Safe to call fr...
objdump objdump -f [lib.a/lib.so] 这个能直接看到打包产物的elf format ar + file 另外的方法就是ar + file ar x lib.a file *.o
通过实验深入了解 TCP 数据的发送和接收 通过实验深入了解 TCP 数据的发送和接收 内存分页初探 内存分页初探 分页 深入理解Linux内核页表映射分页机制原理 一文详细梳理C++的类型描述符 一文详细梳理C++的类型描述符 从无栈协程到C++异步框架—多线程环境下的协程调度 从无栈协程到C++异步框架—多线程环境下的协程调度 Co...
poller poller是一个监听组件,接口非常的简单,配合eventloop使用。 在multi reactor的结构中,有多少个reactor就有多少个poller class Poller : noncopyable { public: typedef std::vector<Channel*> ChannelList; Poller(EventLoop*...
山西 炒脖子(山西) 花71元在晋城高平吃「炒饽子」~太好吃了不愧是山西 武汉 恩施菜(武汉) 东湖硒悦,电力系统的招待酒店 吉庆街强记打边炉(武汉) 寻味武汉:吉庆街强记打边炉,涮财鱼片配九江双蒸,粤菜变迁史的“活化石”
Channel channel等于是一个fd需要多路复用情况下的封装,比如epoll在做多路服用的时候,需要epoll_ctl注册fd还有fd上感兴趣的事件,当事件发生的时候需要做相应的处理,这里channel实际上是封装了针对fd的事件处理,还有事件发生时的回调函数。 比如看下eventloop里wakeupfd那个channel的流程 wakeupFd_(createEventfd...
主要看下流式传输中的buffer设计,怎么做到高效的读写 这里以muduo的buffer类设计为例子 /// @code /// +-------------------+------------------+------------------+ /// | prependable bytes | readable bytes | writable bytes | /// | ...
比较复杂的回调里经常出现析构父对象之后还在继续使用父对象的行为 这种就属于悬垂引用问题,针对这种问题开asan都能快速崩掉 这种问题可能导致问题出现乱蹦的堆栈,或者你开了asan之后,一直崩在malloc里,这个时候要做的其实就是缩小调查的范围 如果堆栈直接能看出问题,那当然最好了,崩的点就直接是问题的点 如果堆栈不清晰,就要配合复现的日志,最好是多个,对比定位到相似的日志,...
其实很不想写这个,尤其是大多数的宏都要写在header里,但是宏有时候真的能少些很多代码。。。 这种预编译生效的文本替换,属实是有点ugly了 enum to string #include <stdio.h> #include <string.h> #define NUMARGS(...) (sizeof((int[]){__VA_ARGS__}) / si...