在Windows上,当您执行I / O时,可以使用OVERLAPPED选项进行异步操作。这与在另一个线程上同步执行I / O之间有什么区别吗?如果是这样,哪个更好?操作系统是否只是在异步情况下生成一个单独的线程,还是只是将它排在驱动程序线程上并发送信号而不是阻塞等待?
谢谢!
答案 0 :(得分:1)
Windows I / O本质上是异步的,因此在.NET中执行异步操作(例如should not use a thread),一旦操作完成,就会简单地借用一些现有线程来通知操作完成,但不会创建任何线程。
这与在另一个线程上运行同步操作完全不同。它耗尽了一个线程,使程序的可扩展性降低。在.NET中,线程具有1MB的默认本地存储,因此运行数千个线程将消耗数十亿字节的内存。然后你还需要在线程之间切换的额外费用,这通常很小,但如果你有很多线程就可以加起来。
答案 1 :(得分:0)
根据MSDN开发中心,"异步I / O也称为重叠I / O"此外,它继续说async io由内核处理,实际上是另一个线程。我不了解你,但如果我不必写东西,我就不会......这是我懒惰的程序员规则#1。