异步完成令牌( Asynchronous Completion Token,ACT)常用来在异步IO中传递用户自定义参数。例如,在多路IO复用/解复用的时候,我们可以在ACT中存放异步调用发起者的信息,在操作完成时便于定位最初的调用者。
为传递异步调用的环境信息,Windows平台提供了 I/O完成端口,POSIX提供了aiocb(Asynchronous I/O control block)。但aiocb中并没有专门的字段来存放用户自定义信息。因此,在早期的ACE框架中,只有Windows平台支持ACT。下面代码摘自Linux 2.6.18:
可以发现,aiocb的最后32字节未被系统使用,因此我们可以利用这些字节存放用户自定义信息。通常我们最多传递一个地址指针,32字节足够了。 新版ACE框架中的ACE_POSIX_Asynch_Result正是利用了这一特性,从aiocb派生并扩展其特性。
上述代码中的act_字段实现了用aiocb存放ACT信息。调用aio*系列函数时,只要传递ACE_POSIX_Asynch_Result对象即可。
本文详细介绍了如何在Linux环境下利用aiocb的未使用空间存放异步调用的自定义参数,通过ACE_POSIX_Asynch_Result类实现ACT功能,便于在异步操作完成后定位最初的调用者。
1412

被折叠的 条评论
为什么被折叠?



