【发布时间】:2017-10-27 11:22:29
【问题描述】:
一般来说,当一个进程线程进行读取系统调用时,线程的执行被挂起并且读取本身发生(或计划发生)在操作系统内核中。读取完成后,内核会安排暂停的线程继续执行。这部分我明白了。
我的问题是,当内核从持久性存储(例如 HDD 或 SSD)读取时,是否有 CPU 内核忙于编排读取?
我要求帮助确定我的进程中的最佳线程数。例如,如果我有一个 4 核 CPU,并且我的进程中的一个线程在读取系统调用时阻塞,那么在等待读取完成时,还有多少其他线程可以并行运行? 3? 4?在 3 和 4 之间有更微妙的东西吗?
【问题讨论】:
-
HDD 存储的典型延迟约为 ...gist.github.com/jboner/2841832 10 毫秒或 30000000 CPU 滴答声; SSD 更快,大约 1-0.5 毫秒或大约 1500000-3000000(在 3 GHz CPU - 3 个滴答/纳秒,3000 个/我们,300 万个/毫秒)。因此,当文件读取错过了已经缓存在内存中的文件数据并产生外部 I/O 读取时,CPU 可能不会忙于等待请求并允许其他线程运行。
-
不要尝试确定线程数,而是使用非阻塞调用。
标签: multithreading file io multiprocessing