一般而言,当进程线程进行读取系统调用时,线程的执行将被挂起,并且读取本身会在OS内核中发生(或计划发生)。一旦读取完成,内核便调度挂起的线程以继续执行。我了解这部分。
我的问题是,当内核从持久性存储(例如HDD或SSD)读取数据时,是否有CPU内核忙于编排该读取内容?
我要求帮助确定进程中的最佳线程数。例如,如果我有一个4核CPU,并且进程中的一个线程在读取系统调用中阻塞,那么在等待读取完成时,还有多少个其他线程可以并行运行? 3? 4?在3到4之间更细微的东西?
最佳答案
否,读取操作不会使CPU内核繁忙。
这是(非常)简化的描述,当您尝试从驱动器读取数据时发生了什么:
从中可以看出,没有繁忙的等待在任何地方。当应用程序被阻止等待读取时,CPU可以用于其他任务(如果没有其他任务,则可以使其空闲)。
编辑:正如评论中提到的osgx一样,有一些异常(exception)。至少在Linux中,网络和存储层都在某些情况下诉诸忙轮询,这种情况下,阻塞只是比异步继续要快。
关于multithreading - 从持久性存储读取时,CPU核心是否繁忙?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44203714/