gpt4 book ai didi

multithreading - 与Coro并行运行perl子例程

转载 作者:行者123 更新时间:2023-12-03 11:56:54 25 4
gpt4 key购买 nike

我有一个子例程,我想与Coro并行执行:

use strict;
use warnings;
use Coro;

sub mysub {
my ($in) = @_;
print "$in \n";
foreach my $i (0..100000000){
$i=$i+1;
}
return 1;
}

Coro intro中,我了解了如何创建线程:
for ( 
( async{ mysub "A" } ),
( async{ mysub "B" } ),
( async{ mysub "C" } ),
( async{ mysub "X" } ),
( async{ mysub "Y" } )
) {
$_->join;
}

但是,创建了线程,但是如何并行运行它们呢?该示例指出 Coro::Socket(或更好的 AnyEvent::Socket)使并行执行成为可能,但是如何在我的简单示例中使这项工作有效?

同样(但这是第二个问题),为什么在上面的for循环中传递了 mysub的参数,但在下面的示例中却没有传递?
my @letters = ("A", "B", "C", "X", "Y");
my @in = map { (async {mysub $_ }) } @letters;
for ( @in ) {$_->join};

最佳答案

Coro是一个协作式多任务处理系统。只有在程序显式地将线程割让给另一个线程时,或者在等待Coro-aware调用中的某个事件而将其阻塞时,线程才会将其让给另一个CPU。

例如,以下内容将并行等待HTTP响应:

use Coro                          qw( async );
use LWP::Protocol::AnyEvent::http qw( );
use LWP::UserAgent qw( );

...

for my $url (@urls) {
async { process( $ua->get($url) ) };
}

...

由于Coro不会创建任何OS线程,因此无法像您的示例一样在CPU之间分配算法。

关于multithreading - 与Coro并行运行perl子例程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26735251/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com