[gull] Truc et astuces: multithread en bash

Marc SCHAEFER schaefer at alphanet.ch
Thu Dec 31 13:45:12 CET 2020


Je renvoie, maintenant que la liste refonctionne :)

On Wed, Dec 30, 2020 at 12:19:57AM +0100, Daniel Cordey wrote:
> Perl, ni Bash). Par exemple :

Perl supporte le modèle classique UNIX (fork(2)), typiquement on peut
lancer plein de programmes en parallèle en ouvrant des pipes, c'est très
simple, ou même en appelant fork(2).

Toutefois, Perl supporte aussi les threads, de différentes manières,
assez différentes des threads des autres langages. Ce sont les Perl
interpreter threads [1]: la différence principale est que les threads ne
partagent aucune donnée par défaut (le partage est explicite par un
mot-clé); cela ressemble beaucoup au modèle processus sans le besoin de
shared memory ou l'overhead associé; dès que des données sont partagées
des verrous sont nécessaires, et des deadlocks peuvent survenir.

Si on veut juste des threads pour utiliser la puissance de calcul
multi-core, il y a plus simple: MCE [2], qui peut utiliser une notion de
scatter/gather, donc de grain de calcul.

PS: j'ai été un gros utilisateur du passage de file descripteurs UNIX
    entre processus (style: le processus frontend traite les aspects bas niveaux du
    protocole, style authentification, puis on passe le fichier au processus
    qui s'occupe des données qui suivent); beaucoup plus efficace qu'un
    pipe.

PS/2: et ce qui est sympa, sous Linux, c'est que clone(2) qui implémente
      fork(2) permet de tout faire: du thread au processus lourd, on
      choisit ce que l'on partage.

[1] https://perldoc.perl.org/threads
[2] https://metacpan.org/pod/MCE


More information about the gull mailing list