boost_asio学习第1课 1、io_service 简介

垂涎 boost 很久了,毕竟 :"准标准库"嘛,怎么会不让人动心呢。不过在下才疏学浅,若有错误,或者理解不当的地方,欢迎各位大佬前来吐槽指正。

..........言归正传,下面来谈谈我所理解的 io_service。

io_service 可以说是 asio 的核心了,这个“核心”起了一个桥梁的作用,紧密连接着应用程序和操作系统,处理各种 IO 操作。或许一张图的表现力更加直观。

boost_asio学习第1课 1、io_service 简介_第1张图片

好了闲话少说,一起开揭开 io_service 的神秘面纱吧。


boost::asio::io_service io_service;

简单的一句代码,io_service 实例 就被创建出来了,但是光知道这些还不行,我们还得知道 io_service 封装的细节。就是说,我们不光要知其然,还要知其所以然。

class io_service : private noncopyable {

private:

        typedef detail::io_service_impl impl_type;

#if defined(BOOST_ASIO_HAS_IOCP)

        friend class detail::win_iocp_overlapped_ptr;

#endif

public:

        class work;

        friend class work;

        class id;

        class service;

        class strand;

}

咋看一下,impl_type 是什么?还有这些成员类又是什么?,既然看不懂,那先搁着,先捡我们看的懂的看。

BOOST_ASIO_DECL io_service();

是不很眼熟? 构造函数哎。好,让我们顺藤摸瓜 GoTo Definition 一下,很快我便找到了它的实现。

io_service::io_service()  : service_registry_(new boost::asio::detail::service_registry( *this, static_cast(0), (std::numeric_limits::max)())), impl_(service_registry_->first_service()){}

稍微瞄一下,我们就能看到成员变量 impl_,这不就是 那个   itypedef 的 mpl_type,到这里就很清晰了。io_service  是 由 typedef detail::io_service_impl ,的来实现的。再  GoTo Definition 一下,我们发现 这个 io_service_impl 还真的是具体实现。

#if defined(BOOST_ASIO_HAS_IOCP)

typedef class win_iocp_io_service io_service_impl;

class win_iocp_overlapped_ptr;

#else

typedef class task_io_service io_service_impl;

#endif

class service_registry;

看了下时间 已经 0点了,该睡了,有关 io_service_impl 的实现我们下回再说。洗洗睡了。

你可能感兴趣的:(boost_asio学习第1课 1、io_service 简介)