单处理器中的多线程

时间:2009-07-28 08:36:42

标签: multithreading

我想知道单处理器系统中的多线程如何对我有用 当你创建线程时,它将仅从主线程获取执行时间片,而其他东西是线程的调度(线程之间的上下文切换)也将花费相当多的时间(抢先内核)并且一次处理器是只执行一个线程。

10 个答案:

答案 0 :(得分:8)

许多进程的速度受到磁盘等I / O设备速度慢的限制。使用多个线程,即使在等待慢速磁盘访问完成时也可以执行有用的工作。当然,如果你的进程不受I / O限制,那么单个处理器上的多线程可以导致减速,而不是加速 - 这是一个关于课程的马的问题。

答案 1 :(得分:3)

使用多个线程对用户体验也很有帮助,即使事情实际上并没有因为它而运行得更快。

当操作在后台运行时,看到整个窗口拒绝重新绘制更糟糕的事情,尤其是当进度条当然变得无用时。

答案 2 :(得分:2)

因为有时线程是表达程序最自然的方式。线程为您提供了一种表示应该从概念上同时运行的任务的方法。即使在单处理器上,它们显然不能同时运行。

使用线程的一个常见区域是GUI,例如。您不希望您的GUI无响应,因为在该程序的另一个区域中正在进行大量工作。因此,通过将GUI拆分为另一个线程,尽管程序中的其他位置进行了大量计算,您仍然可以响应GUI。

答案 3 :(得分:1)

如果你把繁重的工作放在不同的线程中,gui仍然会响应。

答案 4 :(得分:1)

多线程的发明是因为发现程序大部分时间都在等待I / O.如果处理器在其他程序之间共享,则可以使用该空闲时间。尽管管理线程/进程花费了一些处理器时间,但发现这种做法比一次运行一个程序更有效率。

答案 5 :(得分:0)

这取决于操作系统,但调度程序通常也会考虑线程优先级。例如,对于“实时”音频应用程序(例如,通过某些处理来记录音频),处理和记录比UI刷新更重要,因为如果你甚至错过几个样本,音频信号将永远丢失。

大多数“专业级”音频应用程序在多核CPU成为普通用户之前就已经使用了多线程。

答案 6 :(得分:0)

使用单处理器系统,多线程有助于在多个任务之间共享CPU,因此在完成之前,任何人都不会占用CPU。

答案 7 :(得分:0)

一个很好的例子是游戏,你必须同时做很多事情。

常见的方法是有一个主循环来处理事件,游戏逻辑,物理,图形和声音;但是如果这些任务需要以非静态确定的方式交错,因为它们中的一些需要多次迭代来完成(例如,你丢弃一些帧,但游戏逻辑仍在运行)或者你需要声音更频繁,因为否则会听到毛刺;游戏的调度程序可能变得越来越复杂......

在这种情况下,您可以将任务拆分为线程,让操作系统为您执行调度工作。但是你需要非常仔细地设计它,因为很可能所有的线程必须读取相同的数据(世界状态),并且其中一个或两个也写它(游戏逻辑和物理),因此必须坚固正确的锁。

答案 8 :(得分:-1)

有趣的是,当我在我的单处理器 PC上尝试PLINQ示例(并行LINQ,即使用LINQ表达式表示的自动多线程)时,我仍然获得了大约2倍的速度提升。这令我感到困惑,但我最好的猜测是它与超线程有关。因此,单核CPU显然可以表现为使用同时多线程执行。我真的不明白超线程,但我猜想发生的事情是第二个线程适合第一个线程看到CPU空闲的时间。

值得尝试。

答案 9 :(得分:-1)

多线程在单处理器中很有用,因为可以在多个线程的帮助下在I / O设备和CPU上同时运行进程。