MultiThreading en BASH

Comment faire du MultiThreading en BASH…. En fait c’est assez simple, il suffit des mettre les scripts en arrière-plan et d’attendre qu’ils soient terminés. Bien sûr, il peut exister certaines limitations…. C’est un non-sens de mettre 20 scripts en parallèle quand il n’y a que 4 processeurs….

Donc pour gérer efficacement le multi-Threading », personnelemen,t je limite le nombre de threads au nombre de processeurs…..

Voici une manière simple de gérer le multithreading :

#--------------------------------------------------
# Get the maximum physical Threads
function JobMaxPhysicalThreads() {
        echo $(grep -c proc /proc/cpuinfo)
}
#--------------------------------------------------

#--------------------------------------------------
# Is Max Threads count reached ? If yes, wait....
function JobOngoingThreads() {
    # How many jobs in Background now ?
    echo $(jobs|grep -vi "done"|wc -l)
}
#--------------------------------------------------

#--------------------------------------------------
# Is Max Threads count reached ? If yes, wait....
function JobMaxThreadsReachedWait() {
    # How many jobs in Background now ?
    JobsInBackGround=$(JobOngoingThreads)
    # Is background processes limit reached ?
    if [[ $JobsInBackGround -gt $nThreadsLimit ]]; then
       # Wait until some slots are available
       while [[ $JobsInBackGround -gt $nThreadsLimit ]]
         do
           sleep 1
           JobsInBackGround=$(JobOngoingThreads)
         done
   fi
}
#--------------------------------------------------

Dans le script lui-même avant d’envoyer un nouveau script en arrière-plan, il suffit de vérifier si le nombre de scripts en arrière-plan n’a pas atteint la limite, si oui, alors il suffit d’attendre qu’il y ait un slot de disponible…

Par exemple :

## Check Current Number of Threads...in case, max is reached, wait !
JobMaxThreadsReachedWait
## Launch next Thread
LaunchNewScript

 

Laisser un commentaire