为什么说线程太多,cpu切换线程会浪费很多时间?

一直不明白一件事情,说线程不宜开得太多,太多的线程会导致线程频繁切换,消耗cpu时间。但是对于操作系统来说,运行当中的线程肯定是大于1个,所以cpu也是一直在切换的。10个运行中的线程和20个运行中的线程,有什么区别?反正cpu都是一直在切换,这里假设线程的优先级都是一样的,并且都还是按照cpu的时间片轮转来切换线程。

第一种情况,10个运行中的线程a1-a10。cpu在a1-a10来回切换,切换了一轮,又重a1开始,重复切换,不断循环(假设任务一直执行)。

第二种情况,20个运行中的线程b1-b20。cpu在b1-b20来回切换,切换了一轮,又重b1开始,重复切换,不断循环(假设任务一直执行)。

以上两种情况对于cpu来说,都是一直在切换,在线程切换上消耗的时间不是一样的?

阅读 158
评论
    3 个回答
      • 3.9k

      线程切换本身也需要时间和其他资源
      线程越多,这部分消耗就越大,留给线程运行的资源就越少

        • 1.1k

        要把大象装冰箱,需要三步:

        1. 打开冰箱门
        2. 把大象装进冰箱
        3. 关上冰箱门

        你不能说【1】和【3】不是装冰箱的步骤吧。

        同理,你这里说的【CPU切换线程】,不仅仅是【切换】而已:

        1. 保存线程【1】运行上下文
        2. 加载线程【2】运行上下文

        这里的【保存】与【加载】的过程同样属于线程切换的过程中的步骤。

        除非线程【1】和线程【2】同属一个运行上下文,同个进程里面的线程是会共享相同的虚拟内存和全局变量等资源的,所以同个进程之间的线程切换会消耗更少的资源。

        这也是为什么与多进程相比,多线程更有优势的原因。

          撰写回答

          登录后参与交流、获取后续更新提醒

          相似问题
          推荐文章