使用委托我可以异步调用任何函数。 从文档中我了解到这是通过为线程池排队工作项来完成的。
还可以对IO功能进行异步调用(例如从套接字,文件,网页等读取)。我想(但我不确定)这不会在线程池中产生一个工作项。只有在获得结果(或错误)之后,才会从线程池中的新线程调用回调。
这个假设是否正确?或者是一个异步IO调用,也只是生成了一些线程?如果是这种情况,异步调用如何比自己生成线程(使用线程池)更好地执行并阻止?
还有:在任何给定时间可以处理多少个异步调用?如果使用了线程池,我想你想要多少。但是在IO异步调用的情况下,是否有限制?是这样,你怎么知道限制是什么?
答案 0 :(得分:7)
异步IO比使用线程池中的另一个线程要复杂得多。
OS 中有许多不同的技术,它们支持异步IO:
1发信号通知设备内核对象
对单个设备执行多个同时的I / O请求没有用。允许一个线程发出I / O请求,另一个线程处理它。
2发信号通知事件内核对象
允许针对单个设备同时发出多个I / O请求。允许一个线程发出I / O请求,另一个线程处理它。
3使用可警告的I / O
允许针对单个设备同时发出多个I / O请求。发出I / O请求的线程也必须处理它。
4使用I / O完成端口
允许针对单个设备同时发出多个I / O请求。允许一个线程发出I / O请求,另一个线程处理它。这种技术具有高度可扩展性,并且具有最大的灵活性。