当前位置:  开发笔记 > 编程语言 > 正文

有没有办法在Perl中使用托管进程(即实际工作的线程替换)?

如何解决《有没有办法在Perl中使用托管进程(即实际工作的线程替换)?》经验,为你挑选了2个好方法。

我在perl中有一个多线程应用程序,我必须依赖几个非线程安全模块,所以我一直使用fork()带有kill()信号的ed进程作为消息传递接口.

问题是信号处理程序有点不稳定(至少可以说)并且经常最终导致在不适当的状态下被杀死的进程.

有一个更好的方法吗?



1> xdg..:

根据您的程序需要做什么,您可以考虑使用POE,这是一个用于具有用户空间线程的多线程应用程序的Perl框架.它复杂,但优雅且功能强大,可以通过将活动限制在单个Perl解释器线程中来帮助您避免非线程安全模块.

有用的资源入门:

由Matt Sergeant 编写POE演示文稿(从这里开始了解它是什么和做什么)

POE项目页面(很多食谱示例)

此外,还有数百种预构建的POE组件可用于组装到应用程序中.



2> innaM..:

您始终可以在父级和子级之间使用管道来回传递消息.

pipe my $reader, my $writer;
my $pid = fork();
if ( $pid == 0 ) {
    close $reader;
    ...
}
else {
    close $writer;
    my $msg_from_child = <$reader>;
    ....
}

不是一种非常舒适的编程方式,但它不应该是"不稳定的".

推荐阅读
kikokikolove
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有