2010-09-23 158 views
0

我很好奇多线程是什么。我已经听到了在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; 
} 

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

+12

您是否尝试阅读Wikipeadia - http://en.wikipedia.org/wiki/Multithreading? perl中有关于线程的一些特殊的东西,但总体思路与所有其他语言相同。 – 2010-09-23 15:41:46

+4

线程安全年轻蚱蜢 – Chris 2010-09-23 15:54:09

+1

您是否运行了Perl代码,并观察输出? – 2010-09-23 16:28:24

回答

1

它就像fork ing,但重量更轻,并且在线程之间共享数据比在进程之间更容易。不足之处在于,由于共享数据,编写错误代码比较容易(线程a修改线程b认为应该保持不变,线程a获取资源c的锁并尝试获取资源d的锁,但是线程b对资源d具有锁定,并试图获取对资源c的锁定等)。

4

线程化是一种让不止一件事同时发生的方式,至少从概念上讲(在单核单CPU计算机上,可能带有ARM或Atom,只有一个执行线程在时间)。

Perl示例同时启动十个不同的代码段。每一块代码只需要关心它正在做什么,而不必担心其他事情。这意味着你可以用一个简单的子程序输出Perl程序,这个简单的子程序以合理简单的方式称为十次。

一个用途是在与用户交互的程序中。通常需要有一个响应式界面以及幕后发生的事情。在一块代码中很难做到这一点,因此界面通常在一个线程中,而在其他线程中则是幕后的东西,因此界面可以很快速并且后台任务正在运行。

如果您熟悉运行多个进程,线程非常相似,但它们之间的连接更加紧密。这意味着在线程之间建立和通信更容易,但是由于不允许执行所有可能的命令,也很容易搞砸。