有没有一种有管理的进程在Perl(即一个线程的替代,实际工作)?
-
02-07-2019 - |
题
我有一个multithreded应用程序在perl为我必须依赖几种非线安全的模块,这样我已经被使用 fork()
ed过程 kill()
信号的消息传递的接口。
问题是,信号处理程序是一点不稳定(至少),并常常最终与进程被打死在inapropriate国。
有没有更好的方式做到这一点?
解决方案
查看 forks.pm , “使用fork()”的“Perl线程的直接替换”这使得更合理的内存使用(但不要在Win32上使用它)。它允许您声明“共享”变量然后它会自动传递进程之间对这些变量所做的更改(类似于threads.pm的工作方式)。
其他提示
您可以在父级和子级之间始终使用管道来回传递消息。
pipe my $reader, my $writer;
my $pid = fork();
if ( $pid == 0 ) {
close $reader;
...
}
else {
close $writer;
my $msg_from_child = <$reader>;
....
}
不是一种非常舒适的编程方式,但它不应该“不稳定”。
从perl 5.8开始,您应该查看核心线程模块。请查看 http://metacpan.org/pod/threads
如果要使用非线程安全的模块,通常可以在线程入口点内使用require和import加载它们。
不隶属于 StackOverflow