- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
Tom Christiansen's example code (à la perlthrtut )是一个递归的线程实现,用于查找和打印 3 到 1000 之间的所有质数。
下面是稍微改编的脚本版本
#!/usr/bin/perl
# adapted from prime-pthread, courtesy of Tom Christiansen
use strict;
use warnings;
use threads;
use Thread::Queue;
sub check_prime {
my ($upstream,$cur_prime) = @_;
my $child;
my $downstream = Thread::Queue->new;
while (my $num = $upstream->dequeue) {
next unless ($num % $cur_prime);
if ($child) {
$downstream->enqueue($num);
} else {
$child = threads->create(\&check_prime, $downstream, $num);
if ($child) {
print "This is thread ",$child->tid,". Found prime: $num\n";
} else {
warn "Sorry. Ran out of threads.\n";
last;
}
}
}
if ($child) {
$downstream->enqueue(undef);
$child->join;
}
}
my $stream = Thread::Queue->new(3..shift,undef);
check_prime($stream,2);
在我的机器上运行时(在 ActiveState 和 Win32 下),代码在以 'Sorry.线程用完
”警告。
在试图弄清楚为什么我受限于我可以创建的线程数量时,我将 use threads;
行替换为 use threads (stack_size => 1);
。生成的代码愉快地处理了 2000 多个线程。
谁能解释这种行为?
最佳答案
The default per-thread stack size for different platforms varies significantly, and is almost always far more than is needed for most applications. On Win32, Perl's makefile explicitly sets the default stack to 16 MB; on most other platforms, the system default is used, which again may be much larger than is needed.
By tuning the stack size to more accurately reflect your application's needs, you may significantly reduce your application's memory usage, and increase the number of simultaneously running threads.
Note that on Windows, address space allocation granularity is 64 KB, therefore, setting the stack smaller than that on Win32 Perl will not save any more memory.
关于windows - 为什么我的 ActivePerl 程序报告 'Sorry. Ran out of threads'?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2442436/
我安装了 On Windows 7 64-bit OS ActivePerl 64bit Version 5.16.3.1603 on D disk as D:/perl64 我控制了windows路
我正在尝试使用以下代码读取二进制文件: open(F, "; close F; open (D,">debug.txt"); binmode(D); print D $data; close D; 输
我正在使用以下代码来测试向浏览器输出 fatal error : use CGI; use CGI::Carp qw(fatalsToBrowser); die "test"; 我希望在浏览器中看到一
我最近将我的客户端 64 位 ActivePerl 版本从 5.10.1.1007 版本升级到 5.22.2.2203,并且遇到了很多问题。 我真的更愿意跳到 Strawberry,但我必须先在我每天
我安装了 ActivePerl 版本 5.12.2.1202 和 PPM 版本 4.11。 我想使用带有 GUI 的调试器,我可以在其中查看 Perl 程序变量。在对 Eclipse 和 EPIC 感
除非我使用备份扩展指定它们,否则我无法就地编辑在 ActivePerl 下运行的 Perl 单行代码: C:\> perl -i -ape "splice (@F, 2, 0, q(inserted
我有一个在 Windows 中运行的 perl 代码,在 apache2.2 上使用 activeperl 5.8 和 mysql 作为数据库。我只是好奇,我可以在不破坏系统任何东西的情况下迁移到 s
鉴于我已经编译了一些 unix 程序,我可能需要做些什么来将它重新定位到不同的目录并让它继续正常运行。 我正在考虑 Perl,但对其他系统(如 Apache)感兴趣,这些系统在完成后似乎也会失败。为了
我已经在我的 Windows 操作系统上安装了 ActivePerl。我已关注以下网址安装步骤 ActivePerl Installation 完成后,我尝试在命令行上运行“perl -v”。但是报如
我有 perl 脚本,截至今天早上,这些脚本在 Windows 7 中运行良好。我错误地将记事本用作打开/编辑我的 .pl 文件的默认设置。现在,当我尝试从 DOS 提示符下运行未经编辑的 .pl 文
我是 Perl 新手,我正在使用 ActivePerl . 我收到以下错误: Can't locate XML/LibXML.pm in @INC... 我已经尝试了所有方法,但找不到为 XML::L
我想使用 gmail 的 smtp 服务器和 perl 发送电子邮件。我正在尝试安装 Email::Send::Gmail ,但我不清楚安装它的步骤是什么。似乎它取决于我没有安装的其他模块。 最佳答案
我最近在我的 Windows XP 上安装了 ActivePerl 5.12.2.1202 C:/Perl .我是 Perl 脚本的新手。 我只想运行一个 Perl 程序,其中包含一个 print语句
PPM 的版本(4.06,我在 Windows 下运行)直接将我带入 GUI,这很好,但由于我对命令行提示符非常满意,所以我仍然想找到一种方法来获取命令行提示符而不是 GUI。 最佳答案 如果您不带参
我在 Windows 上的 Perl (ActivePerl) 上使用 fork() 作为基本的套接字服务器,但显然存在问题(它不会在几次后接受连接),是吗任何解决方法? 相关代码部分如下: whil
我想使用 cygwin 工具(屏幕)进行开发,从 cygwin 环境调用 ActiveState Perl 调试器会引发以下错误。 bash-3.2$ perl -d test.pl The syst
在 ActivePerl 中,“ppm”从 Internet 安装包,“ppm install x.ppd”从 ppd 文件安装,但大多数 CPAN 包以 .tar.gz 的形式分发 如何为没有 In
Perl 是 Practical Extraction and Report Language 的缩写 "实用报表提取语言"。 ActiveStatePerl 和 Strawb
我正在尝试安装该模块以发送邮件。 我收到以下错误: Warning: Prerequisite 'IO::Socket::SSL => ' for 'CWEST/Net-SMTP-SSL-1.01.t
在 Windows 上的 ActivePerl 中,如何打开浏览器访问某个 URL? 在 Python 中,有 webbrowser.open(url),但我似乎找不到 Perl 的等价物。 最佳答案
我是一名优秀的程序员,十分优秀!