这个问题,是一个典型的多线程和单线程的选择的问题。还涉及到一些操作系统资源(I/O 密集、CPU 密集)相关的知识。
先来说结论:从磁盘上进行文件读取,是一种典型的 I/O密集型操作,这种操作的大部分耗时都在 I/O 上,那么可以利用多线程来同时执行任务,从而提高整体效率。
单线程读取文件的优点是实现简单,没有线程之间的竞争和同步的问题。还有就是单线程不涉及到多个线程的创建和开销,也不需要进行上下文的切换,所以这部分的开销比较少。
但是单线程的缺点也比较明显,那就是只有一个线程处理所有文件读取任务,因此所有操作都是串行的。而文件读取操作又是I/O密集型操作,可能会导致较长的等待时间。
多线程的优点是可以同时进行多个文件的读取操作,特别是在I/O密集型任务中,多个线程可以更好地利用系统的CPU资源。
但是多线程也不是毫无缺点,主要有几个,其实就是单线程的那几个优点,一个是多个线程的创建、调度、销毁都是额外的开销,并且需要考虑线程安全问题,以及频繁的上下文切换会带来额外的开销。
但是,即使这样,多个线程的执行也会更快一些,一方面多线程的开销销毁这部分开销很小,可以忽略不计,线程安全的问题可以考虑通过分片的方式,让多个线程天然就处理不同的文件,互相不冲突即可。