gpt4 book ai didi

perl - 在多核 cpu 上使用最大线程数

转载 作者:行者123 更新时间:2023-12-01 06:20:12 25 4
gpt4 key购买 nike

起初,我的 perlskills 是有限的,所以请记住这一点。 ;)

我编写了一个 perlscript,它索引一个目录并为其中的每个文件做一些事情。

处理文件需要一些时间。在 CPU 负载接近 100%(一个核心)的情况下,每次 1 到 5 分钟。我的想法是,因为我有一个四核 cpu,一次处理多个文件,这导致我使用 perl 线程。

所以这是我的问题。

1)我的假设是否正确,perl 线程会自动分配给多个内核?

2)我发现这个代码示例可以满足我的需要,我想但我不知道如何始终保持只有 8 个线程处于事件状态。该示例启动线程的静态计数,并在处理它们时完成。但是,就我而言,可以说,我有 50 个文件要处理,但同时只有 8 个线程应该处于事件状态。

所以它应该是这样的:
读取目录,为前 8 个文件启动 8 个线程,并保持 8 个线程工作,直到处理完所有文件。

#!/usr/local/roadm/bin/perl
# This is compiled with threading support

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;
}

来源: https://wiki.bc.net/atl-conf/pages/viewpage.action?pageId=20548191

我现在搜索了几个小时,但没有找到一个例子,如何做到这一点。当有人可以给我提示如何开始时会很好。

谢谢你。

最佳答案

perl 中的线程是重量级的;它们需要时间和 cpu 来启动,需要时间、cpu 和内存在它们之间共享数据(并要求您仔细检查您使用的模块以确保线程安全)。

fork 通常会好得多; Parallel::ForkManager让这很容易。

关于perl - 在多核 cpu 上使用最大线程数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6642368/

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