
源码阅读笔记
文章平均质量分 84
Mr.Rosin
学海无涯,学他丫的
展开
-
Boost.ASIO源码:thread_info_base::allocate古怪的内存分配逻辑解析与猜想
自我感觉这个内存组织思路很有参考学习价值,故在此总结一下。thread_info_base介绍啥是thread_info要引出thread_info_base就得从scheduler说起,scheduler实际上就是io_service的一个实现,而众所周知(不知者百度),io_service中有一个公共队列和若干个与线程数对应的私有队列,当用户post了数据进来时,随机的某个空闲线程的私有...原创 2018-11-29 17:34:43 · 692 阅读 · 0 评论 -
Boost.ASIO源码:service_registry::use_service()详解以及相关type_traits解析
Boost.ASIO源码:service_registry::use_service详解以及相关type_traits解析这都是神仙写的代码吧use_service()的功能与内部逻辑init_key()详解enable_if和is_base_of中的细节这都是神仙写的代码吧没什么,这个标题只是忍不住表达一下对ASIO的惊叹。曾经看《STL源码剖析》对里面的type_traits的设计惊为天...原创 2018-11-28 15:29:50 · 1082 阅读 · 1 评论 -
Boost.ASIO源码:epoll和套接字描述符包装类epoll_reactor之descriptor_state
io_service(在这里实现类为scheduler)需要一个监听描述符的epoll机制,而这个机制的实现,便是来源于epoll_reactor和descriptor_state,下面详细介绍。大致介绍descriptor_state保存所有描述符(就我观察应该都是socket描述符)的状态、处理函数handler、以及epoll相关数据等信息。而epoll_reactor算是Linux原生...原创 2018-12-01 14:11:11 · 2247 阅读 · 0 评论 -
Boost.ASIO源码:concurrency_hint与相关宏的值分析
大概介绍concurrency_hint本身只是一个整型数值,在Boost.ASIO里经常可以看到作为构造函数参数传给各种服务(明确下:execution_context::service的子类),指明这些服务有没有多线程或其它并发逻辑,非并行情况下甚至还能稍稍简化下函数的执行逻辑,如: if (more_handlers && !one_thread_) ...原创 2018-11-28 20:01:39 · 1244 阅读 · 0 评论 -
Boost.ASIO源码:deadline_timer源码级解析(三)—— 从源码解释io_service::run()到底发生了什么
上一篇博客讲到了epoll_reactor的scheduler_timer函数,但是这个函数的操作逻辑其实很不明显,后面涉及到更深的逻辑,故在这里展开讲解。其实这篇文章的主题我也纠结了很久,不知道从何讲起,因为这个逻辑牵扯十分的深,整个io_service的运行逻辑几乎都有牵扯到,于是干脆就借此总结下io_service.run()的大致运行逻辑。前文回顾前面讲deadline_timer:...原创 2018-12-26 14:57:59 · 1657 阅读 · 1 评论 -
Boost.ASIO源码:deadline_timer源码级解析(一)
deadline_timer相关类介绍deadline_timer众所周知,是asio的一个核心定时器,支持同步定时触发和异步定时触发。具体有什么功能如何使用这里不作介绍,本文主要从deadline_timer的wait和async_wait入手,解释deadline_timer的实现逻辑。先解释下deadline_timer的大致结构。deadline_timer实际上是个别名,它的真正名字...原创 2018-12-21 14:43:18 · 1524 阅读 · 0 评论 -
Boost.ASIO源码:deadline_timer源码级解析(二)——epoll_reactor定时器逻辑
前文回顾前面讲deadline_timer::async_wait()讲到了epoll_reactor::scheduler_timer(),那时候讲得很模糊,这里稍微展开再讲解一下。首先先回顾下scheduler_timer的源码:template <typename Time_Traits>void epoll_reactor::schedule_timer(timer_qu...原创 2018-12-21 17:56:58 · 922 阅读 · 0 评论 -
Boost.ASIO源码:pthread包装类——posix_event小结
posix_event介绍该类用在scheduler中,用于唤醒阻塞的线程,下面代码中的conditionally_enabled_event实际上就是posix_event的包装类:class scheduler : public execution_context_service_base&lt;scheduler&gt;, public thread_context{//...原创 2018-12-19 12:38:19 · 660 阅读 · 0 评论 -
Boost.ASIO源码:从async_write看ASIO的异步IO逻辑
async_write有两个对外接口:template <typename AsyncWriteStream, typename Allocator, typename WriteHandler>inline BOOST_ASIO_INITFN_RESULT_TYPE(WriteHandler, void (boost::system::error_code, std::s...原创 2019-01-12 15:47:21 · 2978 阅读 · 0 评论