【发布时间】:2015-07-31 21:31:22
【问题描述】:
在调度方面有几件事我不太明白:
- 我假设每个进程/线程,只要它受 CPU 限制,都会给定一个时间窗口。一旦窗口结束,它就会被换出并运行另一个进程/线程。这个假设正确吗?是否有任何球场数字,该窗口在现代 PC 上有多长?我假设大约100毫秒?换出的开销是多少?几毫秒左右?
- 操作系统是按进程调度还是按单个内核线程调度?安排每个进程并在该时间窗口内运行该进程可用的任何线程会更有意义。这样,进程上下文切换被最小化。我的理解正确吗?
- 每个线程运行的时间与其他系统时间(例如 RAM 访问、网络访问、HD I/O 等)相比如何?
- 如果我正在读取套接字(阻塞),我的线程将被换出,直到数据可用,然后将触发硬件中断并将数据移动到 RAM(由 CPU 或由 NIC,如果它支持 DMA)。我是否正确地假设线程不一定会被换回以处理传入的数据?
我主要询问的是 Linux,但我想这些信息也适用于 Windows。
我意识到这是一堆不同的问题,我试图澄清我对这个主题的理解。
【问题讨论】:
-
调度频率是在内核编译时设置的,因此它可能因系统而异。交换是通过
swappiness设置控制的,这也有所不同。不是一个完整的答案,但我希望它有所帮助:) -
确实有帮助。至少我知道用谷歌搜索什么:-)。谢谢。
标签: linux windows multithreading