使用委托(delegate)我可以异步调用任何函数。 从文档中我了解到这是通过为线程池排队工作项来完成的。
还可以对 IO 函数进行异步调用(例如从套接字、文件、网页等读取数据)。我认为(但我不确定)这不会在线程池中生成工作项。只有在获得结果(或错误)后,回调才会从线程池中的新线程调用。
这个假设是否正确?或者是一个异步 IO 调用,也只是一些产生的线程?如果是这种情况,异步调用如何比自己生成线程(使用线程池)并阻塞性能更好?
还有:在任何给定时间可以处理多少个异步调用?如果使用线程池,我猜你喜欢多少。但是在IO异步调用的情况下,有限制吗?既然如此,你怎么知道极限是多少?
最佳答案
异步 IO 比使用线程池中的另一个线程要复杂得多。
操作系统内部有许多支持异步 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 请求,另一个线程处理它。该技术具有高度可扩展性和最大的灵 active 。
关于c# - .net中异步调用和异步io调用的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2385452/