2016-07-30 15 views
0

Wenn ich einige Jobs parallel wie folgt ausführen:Parallel in bash

#!/bin/bash 
for i in `seq 1 100`; 
do 
    ./program data$i.txt & 
done 

bedeutet dies, dass ich 100 Kerne? Oder, wenn ich nicht 100 Kerne habe, warten einige der Jobs, oder sie werden alle auf dieser niedrigeren Anzahl von Kernen laufen, so dass mehr als 1 Job einem Kern zugewiesen werden? Und für den Fall, dass ich 100 Kerne brauche, was soll ich tun, um 10 auf einmal zu laufen, ohne die for-Schleife von 1 bis 10 zu machen und die bash-Datei 10 mal laufen zu lassen?

Antwort

1

Das Betriebssystem ist für die Prozess- und Thread-Planung verantwortlich.

Oder falls ich 100 Kerne haben nicht einige der Arbeitsplätze warten

Ja, werden die Aufträge warten. Aber es wird dir wahrscheinlich nicht klar sein. Ein Job wird nicht warten auf einen anderen Job zu beenden, bevor es beginnt. Wenn der jeweilige Job ausgeführt wird, kann der Scheduling-Algorithmus des Betriebssystems den Prozess, der den Job ausführt, unterbrechen und die CPU einem anderen Prozess übergeben. Siehe: Scheduling

Auszug:

Prozess-Scheduler

Der Prozess-Scheduler ist ein Teil des Betriebssystems, das zu einem bestimmten Zeitpunkt, welcher Prozess entscheidet läuft. In der Regel kann ein laufender Prozess angehalten, in die Warteschlange der laufenden Warteschlange verschoben und ein neuer Prozess gestartet werden. Ein solcher Scheduler ist als preemptive Scheduler bekannt, ansonsten ist er ein kooperativer Scheduler.