【问题标题】: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)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多