时间片是否给予等待I / O的线程“浪费”?

时间:2011-03-05 01:21:22

标签: multithreading events

我目前正在分析使用线程模型或事件驱动模型编写服务器的优缺点。我已经知道线程模型的许多缺点(由于上下文切换开销,虚拟内存限制等而无法很好地扩展)但我在分析中遇到了另一个并且想验证我对线程的理解是否正确。

如果我有5个线程,1个正在工作(未被阻塞),4个被阻塞等待I / O(例如等待来自套接字的数据),不是给予那些的CPU时间4个线程基本上浪费了,因为实际上没有工作(假设没有数据到达)?给这4个被阻塞的线程的时间片正在从1个线程实际工作中消失时间,对吗?

在这种情况下,我明确地说套接字是阻塞的。

2 个答案:

答案 0 :(得分:2)

没有。虽然它实际上取决于OS的类型,I / O类型(轮询/ DMA)和设备驱动程序架构,但大多数设备I / O都是使用DMA +中断执行的。在这种情况下,线程进入休眠状态,直到触发此类I / O操作的中断,并且调度程序在其挂起的I / O完成之前不访问这些线程。仅轮询I / O可能导致CPU消耗,例如硬盘的PIO模式。

答案 1 :(得分:0)

线程不需要使用整个时间片。我不知道具体细节,但如果被阻止的线程甚至有时间,他们肯定不会全部使用它。

显然,这些细节因平台到平台到环境而异。