Linux是一种支持时间分割进程或线程的操作系统。

22 浏览
0 Comments

Linux是一种支持时间分割进程或线程的操作系统。

一位教授曾在课堂上告诉我们,Windows、Linux、OS X和UNIX都是基于线程而不是进程进行扩展的,所以即使在单处理器上,线程对于您的应用程序也会有益,因为应用程序可以获得更多的CPU时间。

我在我的机器上尝试了以下代码(该机器只有一个CPU)。

两个测试在速度上是相同的。

这让我想:“哇,线程太差了”。但是,在一台有四个处理器的大学服务器上重复测试后,速度几乎增加了四倍。

我在解释我家机器的测试结果时有没有忽视什么东西?

0
0 Comments

在课堂上,一位教授告诉我们,Windows、Linux、OS X和UNIX都是按照线程而不是进程划分资源的,因此即使在单处理器上,线程对你的应用程序也会有好处,因为应用程序可以得到更多的CPU时间。

但事实并非总是如此。如果你的应用程序是唯一需要大量CPU资源的程序在运行,增加线程数量并不能魔法般地增加更多的CPU时间——这只会导致更多的CPU时间被浪费在上下文切换上。

这让我想到,“哇,线程真糟糕”。但是,在一台拥有四个处理器的大学服务器上重复进行测试后,速度几乎提升了四倍。

这是因为使用了四个线程,它可以利用所有四个处理器。

+1。你想要测试的是,假设有其他需要大量CPU资源的进程正在运行(比如只有一个线程),你的测试程序在家用机上使用4个线程相比于使用1个线程是否获得更多的CPU时间。整体上,两个进程的总时间可能会增加;但是(如果你的教授的说法是正确的),额外的线程将使CPU时间的分配偏向于具有更多线程的进程,从而使其更快地完成任务。

0
0 Comments

在Linux下,进程和线程本质上是完全相同的。调度程序理解称为“任务”的东西,它并不关心它们是否共享地址空间。共享或不共享的事情实际上取决于它们是如何创建的。

选择使用线程还是进程是一个关键的设计决策,不应该轻率决定,但调度程序的性能可能不是一个因素(当然,诸如IPC需求之类的事情会大大改变设计)。

因此,Linux下进程和线程的选择不会影响调度程序的性能。

0
0 Comments

Linux的时间分割是通过进程而不是线程进行的

这个问题的出现的原因是:内核需要管理多个任务和线程,并进行任务和线程之间的上下文切换。线程的执行需要占用大量的资源,而内核需要跟踪每个CPU正在运行的任务和线程,这使得线程在大规模并行的情况下不太可扩展。

解决方法是:设计一个可扩展的调度器,可以在多个CPU上同时运行多个任务。这需要内核具备管理多个任务和线程的能力,并进行任务和线程之间的上下文切换。在现代的CPU中,可以通过硬件支持来提高线程的可扩展性。要了解更多详情,可以查看Linux内核的源代码,特别是早期版本的调度器。这将有助于理解为什么线程在大规模并行中不可扩展,以及如何通过进程进行时间分割。

希望这些信息对你有帮助。

0