系统 perls 中 ithread 支持有多广泛?

问题描述 投票:0回答:1

我正在考虑在最终用于 CPAN 的模块中使用

threads
(ithreads)。我可以查看哪些资源来查看当前默认使用
useithreads=define
编译哪些系统 perls?

异步性是我的模块目的的核心。我将能够实现非线程回退,但由于大量阻塞 IO 和其他长时间运行的函数,如果没有线程,用户体验将会更差。我可以解决大部分问题,但代价是代码非常复杂。螺纹是天生的配合。

因此,我问的原因只是为了帮助我在“更糟糕的用户体验”和“更复杂的代码”之间移动,或者只是“抱歉,这需要线程支持”。

multithreading perl
1个回答
0
投票

“系统”perl 是指预装在操作系统中的 perl,或者可以与操作系统的包管理器一起安装的 perl。系统 perl 的概念与 Linux 最为相关。在 macOS 上,Apple 自 2019 年起已弃用系统 perl,请参阅 https://developer.apple.com/documentation/macos-release-notes/macos-catalina-10_15-release-notes#3318257,一般不建议使用用它来安装额外的 perl 模块。在 Windows 上,没有系统 perl,但通常会安装 Strawberry Perl

要检查 perl 是否支持线程,我们可以运行

$ perl -V:useithreads

如果输出为

useithreads='define';
,则 Perl 是在线程支持的情况下编译的。如果输出为
useithreads='undef';
,则表示未使用线程支持进行编译。

由于 macOS 和 Windows 上的用户不使用系统 Perl,因此我们可以检查最常安装的 Perl 是否支持线程。确实如此:macOS 上的 homebrew perl 和 Windows 上的 Strawberry perl 都支持线程。

现在回到Linux,检查Linux发行版的系统perl是否支持线程的一种方法是使用docker。例如,要检查 Ubuntu 24.04 中的系统 perl 是否支持线程,我们可以运行:

$ docker run --rm ubuntu:latest perl -V:useithreads
useithreads='define';

我还在 debian 上进行了测试(从 Ubuntu 24.04 运行 docker):

$ docker run --rm debian:latest perl -V:useithreads
useithreads='define';

在 CentOS 上:

$ docker run --rm centos:latest perl -V:useithreads
docker: Error response from daemon: failed to create task for container: failed to create shim task: OCI runtime create failed: runc create failed: unable to start container process: exec: "perl": executable file not found in $PATH: unknown.

这意味着centos没有预装perl。但如果我们使用包管理器安装它:

$ docker run --rm -it centos:latest /bin/bash
# yum install -y perl
# perl -V:useithreads
useithreads='define';

看来Linux上的系统perl支持线程。让我知道我是否应该测试其他 Linux 发行版。

© www.soinside.com 2019 - 2024. All rights reserved.