【问题标题】:Does multithreading approach reduce the total time taken for all the process?多线程方法是否会减少所有进程的总时间?
【发布时间】:2018-07-19 01:16:16
【问题描述】:
如果有 n 个线程 (T1, T2...Tn) 在单个处理器中并行运行 n 不同的任务,并且每个线程完成每个任务的时间分别为 (t1, t2...tn) 那么总时间不会完成所有任务是 Ttotal = (t1+t2+..tn) + (total context switch time) 而不是 Ttotal = max(t1, t2..tn) + (context switch time) ?
我知道引入线程会减少总等待时间,但它是否会减少所有任务的总处理时间?我对此表示怀疑,因为我知道没有概念单个处理器可以同时运行多个任务。
【问题讨论】:
标签:
multithreading
concurrency
operating-system
【解决方案1】:
这是部分正确的。您只需考虑 CPU/RAM 消耗线程,在这种情况下,单线程是最好的解决方案。但是如果有线程在等待慢速资源,比如 HDD(甚至 SSD 对 RAM 来说也比较慢)或网络或键盘,情况就不同了。等待线程不需要 CPU 时间,所以我们窃取他们的时间并免费提供给其他线程。这就是我们需要多线程的原因。
【解决方案2】:
花费的总时间将是Ttotal = (t1+t2+..tn) + (total context switch time),因为每个任务 T(i) 将需要 t(i) 个时间单位。
但是,由于所有这些任务都是不相交且彼此不同的,因此它们在n 线程中并行发生,并且可以彼此独立地执行。因此,实际上,在使用多线程时,实际上看起来总耗时是Ttotal = max(t1, t2..tn) + (context switch time)。