Linux是一种支持时间分割进程或线程的操作系统。
在课堂上,一位教授告诉我们,Windows、Linux、OS X和UNIX都是按照线程而不是进程划分资源的,因此即使在单处理器上,线程对你的应用程序也会有好处,因为应用程序可以得到更多的CPU时间。
但事实并非总是如此。如果你的应用程序是唯一需要大量CPU资源的程序在运行,增加线程数量并不能魔法般地增加更多的CPU时间——这只会导致更多的CPU时间被浪费在上下文切换上。
这让我想到,“哇,线程真糟糕”。但是,在一台拥有四个处理器的大学服务器上重复进行测试后,速度几乎提升了四倍。
这是因为使用了四个线程,它可以利用所有四个处理器。
+1。你想要测试的是,假设有其他需要大量CPU资源的进程正在运行(比如只有一个线程),你的测试程序在家用机上使用4个线程相比于使用1个线程是否获得更多的CPU时间。整体上,两个进程的总时间可能会增加;但是(如果你的教授的说法是正确的),额外的线程将使CPU时间的分配偏向于具有更多线程的进程,从而使其更快地完成任务。
Linux的时间分割是通过进程而不是线程进行的
这个问题的出现的原因是:内核需要管理多个任务和线程,并进行任务和线程之间的上下文切换。线程的执行需要占用大量的资源,而内核需要跟踪每个CPU正在运行的任务和线程,这使得线程在大规模并行的情况下不太可扩展。
解决方法是:设计一个可扩展的调度器,可以在多个CPU上同时运行多个任务。这需要内核具备管理多个任务和线程的能力,并进行任务和线程之间的上下文切换。在现代的CPU中,可以通过硬件支持来提高线程的可扩展性。要了解更多详情,可以查看Linux内核的源代码,特别是早期版本的调度器。这将有助于理解为什么线程在大规模并行中不可扩展,以及如何通过进程进行时间分割。
希望这些信息对你有帮助。