从第一次用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]与一个完成端口
首先是这样的一个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]与一个完成端口