Насколько широко распространена поддержка ithread в системных Perls?

Я подумываю об использовании threads (threads) в модуле, предназначенном для CPAN. Есть ли какие-нибудь ресурсы, на которые я мог бы посмотреть, какие системные Perls сейчас компилируются с useithreads=define по умолчанию?

Асинхронность занимает центральное место в цели моего модуля. Я смогу реализовать резервный вариант без потоков, но из-за большого количества блокирующих операций ввода-вывода и других долго выполняющихся функций без потоков взаимодействие с пользователем будет хуже. Большую часть этого я могу исправить ценой значительного усложнения кода. Нитки подходят естественно.

Поэтому причина, по которой я спрашиваю, заключается в том, чтобы просто помочь мне сдвинуться с места между «худшим пользовательским опытом» и «более сложным кодом» или просто «извините, это требует поддержки многопоточности».

Если пользователю нужен ваш модуль, он может легко установить многопоточный Perl с помощью perlbrew (или собрать из исходного кода) в любой системе. Так что я бы не беспокоился о системе Perl. Кроме того, в macOS пользователю обычно не рекомендуется использовать системный Perl для установки модулей, поскольку Apple внесла в него определенные изменения, из-за которых установка дополнительных модулей становится более болезненной.

Håkon Hægland 21.07.2024 15:00

Также в Windows нет системного Perl. Пользователь обычно устанавливает туда Strawberry Perl, и по умолчанию он поддерживает потоки.

Håkon Hægland 21.07.2024 15:14

Эти замечания были бы полезны как часть более широкого ответа, включающего дистрибутивы, включающие/не включающие системный Perl. Re:perlbrew: Я использую его постоянно, но это выходит за рамки, так как я конкретно спрашиваю о системных перлах (что предполагает наличие системного перла). По сути, perl -V из как можно большего количества недавно установленных систем. Если он возвращает «perl: команда не найдена» или что-то в этом роде, это тоже результат. :-)

type_outcast 21.07.2024 19:43

Я использую Ubuntu 24.04, и его системный Perl скомпилирован с поддержкой потоков: /usr/bin/perl -V | grep useithreads дает вывод: useithreads=define. Также Perl установлен по умолчанию в Ubuntu (что подтверждается запуском docker run -it ubuntu:latest /bin/bash, а затем perl -V). Таким образом, один из способов определить, скомпилирован ли системный Perl с поддержкой потоков, — это вручную запустить Docker-контейнеры для всех интересующих вас систем, а затем выполнить perl -V | grep useithreads

Håkon Hægland 21.07.2024 19:56

Проще: perl -V:useithreads

ikegami 21.07.2024 23:24

@HåkonHægland Да, именно это я и имел в виду в своем комментарии perl -V. Создание дюжины или более наиболее распространенных дистрибутивов - это именно то, чего я надеялся избежать (по крайней мере частично), задавая этот вопрос, но если я не получу ответов, у меня есть другие методы... :- ) Вы уже предоставили мне информацию для Win/Mac и Ubuntu 24.04, так что вы можете рассмотреть возможность включения ее хотя бы в ответ. Частичные результаты учитываются.

type_outcast 22.07.2024 00:41

Я не собираюсь публиковать это в качестве ответа, но я нашел парня по имени Клод, который тусовался перед закрытым магазином Fry's Electronics с табличкой «Подскажу грибы». Я спросил: «Пожалуйста, перечислите текущие версии активно поддерживаемых дистрибутивов Linux с датами их выпуска и URL-адресом для получения их последней версии, показав, поставляются ли они с установленным Perl, и если да, то какая версия Perl и была ли установлена ​​эта версия Perl. имеет потоки включенными (useithreads='define')." Они перечислили семь выпусков Linux, выпущенных не позднее 2022 года, каждый раз давали один и тот же ответ — и все они использовали многопоточный Perl!

Bruce Van Allen 22.07.2024 19:45
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
7
89
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Под «системным» Perl мы подразумеваем Perl, который предустановлен в операционной системе или может быть установлен с помощью менеджера пакетов операционной системы. Концепция системного Perl наиболее актуальна для Linux. В macOS Apple объявила устаревшим системный Perl с 2019 года, см. 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 потоки там. И это так: и homebrew Perl в macOS, и Strawberry Perl в Windows поддерживают потоки.

Теперь возвращаясь к Linux, один из способов проверить, поддерживает ли системный Perl дистрибутива Linux потоки, — это использовать docker. Например, чтобы проверить, поддерживает ли системный Perl в Ubuntu 24.04 потоки, мы можем запустить:

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

Я также тестировал на Debian (запускал Docker из Ubuntu 24.04):

$ 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';

Итак, судя по этим трем тестам, система Perl в Linux в целом может поддерживать потоки, но нам нужно проверить больше систем, чтобы быть уверенными. Дайте мне знать, стоит ли мне протестировать для этого другие дистрибутивы Linux.

Другие вопросы по теме