现阶段对boost::asio的理解

本文探讨了Boost.ASIO库中的异步I/O操作,特别是如何利用io_service和io_service::work进行事件调度。在Windows环境下,io_service通常与I/O完成端口(iocp)结合使用。当io_service.run()执行完所有任务后会停止,为保持其运行以处理后续异步任务,需要设置work对象作为守护者。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

从第一次用boost的同步Timer写Hello World到现在已经1年多了。这段时间以来一直断断续续的学了boost::asio中的一些东西。在学校的时候由于操作系统和计算机网络的课都翘掉了,所以对进程、线程、socket等等几乎没什么概念。在不断接触业务上的代码,仿照其他模块完成需要的功能之后开始有了自己的认识。不过老实说,自己对网络方面谈不上特别感兴趣,所以基本上是用多少学多少,学习进度不是一般的慢。之所以写这个总结是因为今天查一个问题的时候突然对asio的原理有了进一步的理解。


首先是这样的一个crash:




以前我看到这样的堆栈就扔在一边不管了(看不出具体是哪个模块的问题),不过上周在查set_option的一个bug的时候调试过win_iocp_io_service,于是决定了解一下这个类到底是做什么的。资料上基本都说了这样一句话:在windows下,io_service的实现是win_iocp_io_service,win_iocp_io_service使用了ICOP实现异步机制。于是搜了一下IOCP,百度百科要比wiki解释得好:
IOCP全称I/O Completion Port,中文译为I/O完成端口。IOCP是一个异步I/O的API,它可以高效地将I/O事件通知给应用程序。与使用select()或是其它异步方法不同的是,一个套接字[socket]与一个完成端口
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值