多线程方法是否会减少所有进程的总时间?

时间:2018-07-19 01:16:16

标签: multithreading concurrency operating-system

如果有n个线程(T1, T2...Tn)在单个处理器中并行运行n个不同的任务,并且每个线程完成每个任务的时间分别是(t1, t2...tn),则将不会”完成所有任务所需的总时间是Ttotal = (t1+t2+..tn) + (total context switch time)而不是Ttotal = max(t1, t2..tn) + (context switch time)吗?

我知道引入线程会减少总的等待时间,但是是否有机会减少所有任务的总处理时间呢?我对此表示怀疑,因为我知道没有概念,其中单个处理器可以在同一时间单位运行多个任务。

2 个答案:

答案 0 :(得分:2)

那是部分权利。您只需考虑占用CPU / RAM的线程,在这种情况下,单线程是最佳解决方案。但是如果有线程在等待慢速资源,例如HDD(甚至SSD的RAM相对慢)或网络或键盘,情况就会有所不同。等待中的线程不需要CPU时间,因此我们可以窃取它们的时间并免费提供给其他线程。这就是为什么我们需要多线程。

答案 1 :(得分:0)

由于每个任务T(i)需要t(i)个时间单位,所以总耗时为Ttotal = (t1+t2+..tn) + (total context switch time)

但是,由于所有这些任务都是不相交的并且彼此不同,因此它们在n线程中并行发生,并且可以彼此独立地执行。因此,实际上,在使用多线程时,实际上似乎总花费了Ttotal = max(t1, t2..tn) + (context switch time)