c# - .net中异步调用和异步io调用的区别

标签 c# .net asynchronous delegates

使用委托(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/

相关文章:

c# - 如果目录不存在,我如何使用 FileSystemWatcher 来监视目录?

javascript - 我应该如何在 Node 中执行此操作?一条快路和一条慢路

c# - IEnumerable 与列表 - 使用什么?它们是如何工作的?

c# - 它被订购了多少次 IENumerable?

java - 适用于移动客户端应用程序的 SignalR webSockets

.net - Nhibernate 和 MS Access

c# - 当我们设置掩码时,有什么方法可以删除 MASKEDTEXTBOX 字段中显示的行吗?

python - 是否可以使用 Python 异步发送许多请求

javascript - 在 useEffect 中响应异步数据获取

c# - 当 Windows XP 将屏幕淡化为灰色时如何通知我?