我有一个普遍的问题。如果cpu有一个核心,我在其上运行多个线程。每个线程用于GET请求。网络连接如何在线程切换后继续存在?
如果一个线程开始从服务器接收响应并且突然发生线程切换,会发生什么情况,考虑到HTTP使用TCP通信,事情会如何结束?
感谢。
答案 0 :(得分:2)
TL; DR连接将继续存在,除非线程在服务器超时终止时控制得太迟。
要了解它为何如此工作,请考虑数据如何从线路(或空中)传输到应用程序。
网络接口将数据从介质(有线)收集到内部硬件缓冲区中,当一些数据块完成时,它会发出所谓的硬件中断(这只是一个低级事件)。 OS使用网络接口的驱动程序处理中断,并且该数据块到达计算机主存储器中的缓冲区。缓冲区由OS控制。当应用程序从连接中读取数据时,它实际上从该缓冲区中读取数据。
当发生线程切换时,主内存的内容永远不会丢失。因此,当线程获得控制权时,它只是从它被暂停的点开始执行任务。
如果线程在服务器已经超时关闭连接时恢复工作,则尝试从连接读取数据的方法会引发IOError。
这个解释过于简单,可能在细节上甚至是错误的,但应该给出关于事情如何运作的整体印象。