如果没有IO线程来处理异步结果,会发生什么情况?

我想知道当没有IO线程处理异步调用的结果时会发生什么。

假设你做了一个异步web请求(在服务器应用程序中,所有异步代码都由线程池处理)。 操作系统会发出什么信号,当您有结果时,以及何时需要IO线程读取套接字中的字节。 如果没有IO线程可用,因为这些线程都在使用中(全部含义由线程池设置的最大值)会发生什么情况? 有信号可以等待,直到有线程可用的队列吗? 还是信号只是闻所未闻? 如果后者发生,等待等待的代码会发生什么?


除非你限制了线程池,否则它将根据需要创建新的I / O线程。 该信号以被称为I / O完成端口(IOCP)的队列状结构等待,直到被检索; 信号不会丢失。


让我们回到更早的时候,当OS使用初步的并没有太多的concurrency范围,那么如果你打开多个应用程序,需要像Excel, Word, Pdf, Ppt一样的IO Excel, Word, Pdf, Ppt ,系统将显示为挂起和无响应,因为它不能将它们全部处理在一起,但是如果你停止排队请求更多,并且系统不会崩溃,那么你将看到所有这些机会都获得了他们的机会,并且他们再次活跃起来。

这是IO requests排队等待处理的典型用例,它们中的任何一个都不会丢失,直到并且除非系统崩溃,由于其实现的稳健性,现在不会经常发生,记住死亡蓝屏,这仍然会发生,这是IO请求丢失时的唯一一点。

事实上,Windows中线程的本质就是在并发之前引入健壮性,这样排队等待处理的东西就不会丢失。 在任何时候它都会超过它的限制来创建超过所需数量的线程

链接地址: http://www.djcxy.com/p/53255.html

上一篇: What happens if there are no IO threads to handle async result?

下一篇: Python 3.5 async keyword