分类
百科

异步IO

异步IO\n\n异步IO是计算机操作系统对输入输出的一种处理方式:发起IO请求的线程不等IO操作完成,就继续执行随后的代码,IO结果用其他方式通知发起IO请求的程序。与异步IO相对的是更为常见的“同步(阻塞)IO”:发起IO请求的线程不从正在调用的IO操作函数返回(即被阻塞),直至IO操作完成。\nPOSIX提供下述API函数:\n\nWindows

异步IO\n\n异步IO是计算机操作系统对输入输出的一种处理方式:发起IO请求的线程不等IO操作完成,就继续执行随后的代码,IO结果用其他方式通知发起IO请求的程序。与异步IO相对的是更为常见的“同步(阻塞)IO”:发起IO请求的线程不从正在调用的IO操作函数返回(即被阻塞),直至IO操作完成。\nPOSIX提供下述API函数:\n\nWindows提供多种异步IO(也称重叠IO)方式:\nIO设备在操作系统内核中表示为内核对象,因此具有可等待(waitable)内核对象状态。例如:文件句柄,线程句柄等等。对于文件内核对象,当一个异步IO完成后,该文件句柄被置为触发态。使用这种方式获取异步IO完成的通知,缺点是如果在一个文件内核对象上同时有多个异步IO操作,只通过文件句柄的触发无法辨识哪个异步IO操作完成了。\n\n例子:\n也可以使用Windows API函数GetOverlappedResult直接阻塞/非阻塞等待指定的异步IO操作是否完成。该函数检查OVERLAPPED结构中的Internal成员的值是否为STATUS_PENDING来判断异步IO是否完成。 \n在异步IO操作的read/write函数调用中给出的OVERLAPPED类型的参数中,可以指定一个内核事件对象。这个异步IO操作完成时,这个内核事件对象会被触发。从而,等待在这个事件对象上的程序就会知道这个异步IO操作完成。\n\n例子:\n\n异步可唤醒I/O操作通过ReadFileEx/WriteFileEx函数指出完成过程回调函数。回调函数在该线程的可唤醒等待(alertable wait)中被执行。\n使用CreateIoCompletionPort函数创建一个完成端口。然后把文件句柄绑定到这个完成端口(通过CreateIoCompletionPort函数)。这个文件句柄上的异步IO操作完成时,会自动向这个完成完成端口发通知。线程通过GetQueuedCompletionStatus函数等待这个完成端口上的完成通知,然后从GetQueuedCompletionStatus的调用返回处恢复线程执行。\n\n使用CreateThreadpoolIo函数创建一个I/O完成对象,绑定了要执行异步I/O操作的文件句柄与待执行的回调函数。通过StartThreadpoolIo函数开始I/O完成对象的工作。每当绑定的文件句柄上的异步I/O操作完成,自动调用线程池上的线程执行指定的回调函数。\n\n例子:\n\n”}

发表评论

电子邮件地址不会被公开。 必填项已用*标注