Dav*_*rtz 13
同步I/O意味着某些执行流程(例如进程或线程)正在等待操作完成.异步I/O意味着没有任何东西在等待操作完成,并且操作本身的完成会导致某些事情发生.
同步I/O - 启动I/O的某些执行工具(如进程或线程)也等待I/O完成(并且可能完成它).当I/O完成时,同一个执行工具继续做其他事情,也许使用I/O的结果.
例:
int i = read (file_handle, buffer, length);
if (i <= 0)
return;
// handle results
Run Code Online (Sandbox Code Playgroud)
这里,read操作开始从文件读取.调用的同一个线程read在读取操作完成时获取返回值,并且可以处理结果.
异步I/O - 没有执行车等待I/O完成.当I/O完成时,无论执行车辆是否完成,I/O都可以安排稍后的事情发生.
例:
async_read (file_handle, buffer, length, completion_handler);
// do other stuff having nothing to do with the read
...
completion_handler(int count)
{
if (count < 0)
return;
// handle results
}
Run Code Online (Sandbox Code Playgroud)
这里,调用async_read开始读操作.启动操作的线程可以继续完成其他操作.当操作完成时,实现调用completion_handler(可能由另一个线程)获取操作的结果.
通常,操作系统不必知道哪个是哪个.例如,您可以仅实现异步操作,并使完成处理程序取消阻止同步线程.通常,在引擎盖下,它们看起来都与在操作完成时调用的一些代码看起来相同,无论必须做什么.
你可以很容易地转向另一个.
如果只有异步操作并希望进行同步操作,则只需调用异步操作,然后阻塞完成处理程序未阻塞的内容.
如果您只有同步操作并且想要一个异步操作,只需创建一个新线程来调用同步操作,并让它在同步操作返回时调用完成处理程序.
| 归档时间: |
|
| 查看次数: |
10261 次 |
| 最近记录: |