假设线程没有内核级支持。一个进程有10个线程在运行,其中一个请求I / O.
phread库是否立即向内核声明I / O请求或者在其就绪队列中开始执行线程?
(如果它声明它是I / O请求,那么它将被抢占CPU,因此多线程无法用于I / O密集型任务)。
答案 0 :(得分:0)
首先,我认为虽然有10个线程“正在运行”,但事实上每次只有一个线程处于活动状态。并且发生上下文切换以创建这种并发运行错觉。
因此,只有实际运行的线程才能向内核发出i / o请求。 如果阻塞I / O,是的,整个系统正在等待I / O响应。 如果它是非阻塞i / o,内核将切换到下一个就绪线程并继续执行。只有当I / O完成时,才会生成中断以通知内核可以将先前的线程重新放回就绪队列。 / p>
但I / O密集型任务确实很慢。