0

假设没有对线程的内核级支持。一个进程有 10 个线程在运行,其中一个线程请求 I/O。

pread 库是立即向内核声明 I/O 请求还是开始在其就绪队列中执行线程?

(如果它声明它是 I/O 请求,那么它将被 CPU 抢占,从而使多线程对 I/O 密集型任务无用)。

4

1 回答 1

0

首先,我认为虽然有 10 个线程“运行”,但实际上每次只有一个线程处于活动状态。上下文切换是为了创造这种并发运行的错觉。

因此,只有实际运行的线程才能向内核发出 i/o 请求。如果它阻塞了 I/O,是的,整个系统都在等待 I/O 响应。如果是非阻塞I/O,内核会切换到下一个就绪线程继续执行。只有当I/O完成后,才会产生中断通知内核前一个线程可以重新放回就绪队列。

但是 I/O 密集型任务确实很慢。

于 2012-04-05T22:44:32.743 回答