在线程中调用来自磁盘操作(阻塞操作)的read()时。 Thread中会发生什么?
1。)CPU空闲单元数据是否已传输到内存?或Wait()和调度程序切换到另一个线程?
2.)如果Thread处于Wait状态,它是如何唤醒的?
谢谢!
答案 0 :(得分:0)
这是一个相当开放的问题,无法简明扼要地回答。发生的情况非常依赖于您使用的操作系统。你说Linux,但即便如此,根据版本,配置和其他一系列内容,也不可能说出可能(或可能不会)发生的事情。
Linux是先发制人的多任务内核。有很多文章,博客和其他资源可以涵盖这些内核的工作方式。例如,http://en.wikipedia.org/wiki/Computer_multitasking。
直接解决您的问题:
1。)根据硬件和驱动程序,是的,当CPU空闲时,数据可能会传输到内存中。如果还有其他进程要运行,内核可能会在等待读取数据时运行它们。
2.)磁盘控制器生成的硬件中断可以唤醒空闲CPU并让内核将数据返回到调用read()的用户域进程。
如果您对所发生的事情感到好奇,我可以鼓励您深入研究内核代码。每个人都可以看到它,为什么不呢,对吧? ;)