【问题标题】:What is multithreading? [closed]什么是多线程? [关闭]
【发布时间】:2011-04-16 08:28:50
【问题描述】:

我很好奇什么是多线程。我在 StackOverflow 上收到的答案中到处都听到过这个名字,但我不知道它是什么,所以我的主要两个问题是它是什么以及我如何从中受益?

编辑:

好的,因为第一个问题并没有真正得到我想要的答案,所以我会继续这样做..

即使在其他语言中,我也从未听说过“线程”。这是我在网上找到的一个例子:

#!/usr/bin/perl

use strict;
use warnings;
use threads;
use threads::shared;

print "Starting main program\n";

my @threads;
for ( my $count = 1; $count <= 10; $count++) {
        my $t = threads->new(\&sub1, $count);
        push(@threads,$t);
}
foreach (@threads) {
        my $num = $_->join;
        print "done with $num\n";
}
print "End of main program\n";

sub sub1 {
        my $num = shift;
        print "started thread $num\n";
        sleep $num;
        print "done with thread $num\n";
        return $num;
}

我似乎无法理解它在做什么。任何人都可以发光吗? 问候, 菲尔

【问题讨论】:

  • 您尝试阅读维基百科 - en.wikipedia.org/wiki/Multithreading 吗? perl 中的线程有一些特殊之处,但总体思路与所有其他语言中的相同。
  • 安全穿线小蚱蜢
  • 您是否运行了该 Perl 代码并观察了输出?
  • 是的,但我可以在不使用线程的情况下做出相同的输出::
  • 实际上...不,我不能...反正效率不高...嗯,让我回来...

标签: multithreading


【解决方案1】:

类似于forking,但重量更轻,线程之间比进程之间更容易共享数据。缺点是,由于数据共享,更容易编写错误代码(线程 a 修改了线程 b 认为应该保持不变的内容,线程 a 获得资源 c 的锁定并尝试获得资源 d 的锁定,但是线程 b 对资源 d 有一个锁定,并且正在尝试对资源 c 进行锁定,等等)。

【讨论】:

    【解决方案2】:

    线程是一种同时发生多件事情的方式,至少从概念上讲(在单核单 CPU 计算机上,可能使用 ARM 或 Atom,一次只有一个执行线程)。

    Perl 示例同时启动十个不同的代码段。每个代码块只需要关心它正在做什么,而不必担心其他任何事情。这意味着您可以通过一个简单的子例程以相当简单的方式调用十次来获得 Perl 程序的输出。

    一种用途是在与用户交互的程序中。通常需要一个响应式界面以及幕后发生的事情。用一堆代码很难做到这一点,所以通常界面会在一个线程中,而幕后的东西在其他线程中,这样界面就可以快速运行,后台任务也可以运行。

    如果您熟悉运行多个进程,那么线程非常相似,尽管它们之间的联系更紧密。这意味着线程之间的设置和通信更容易,但也很容易因为不允许所有可能的执行顺序而搞砸。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-07-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多