如果有n个线程(T1, T2...Tn
)在单个处理器中并行运行n
个不同的任务,并且每个线程完成每个任务的时间分别是(t1, t2...tn
),则将不会”完成所有任务所需的总时间是Ttotal = (t1+t2+..tn) + (total context switch time)
而不是Ttotal = max(t1, t2..tn) + (context switch time)
吗?
我知道引入线程会减少总的等待时间,但是是否有机会减少所有任务的总处理时间呢?我对此表示怀疑,因为我知道没有概念,其中单个处理器可以在同一时间单位运行多个任务。
答案 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)
。