Řekněme, že máme k dispozici jednojádrový procesor. Běžný OS na takovém procesoru stále dokáže rozeběhnout více programů najednou a to díky mechanismu kterému se říká multithreading.

Přirovnání ke koncertu vojenských kapel

Představte si, že jste organizátor koncertu s jedním pódiem. Na tomto koncertu musí vystoupit 10 kapel.

V těchto kapelách hrají jenom vojáci kteří vás poslouchají na slovo, protože jste jejich šílený velitel.

Můžete jakoukoliv kapelu kdykoliv přerušit a vyměnit za jinou kapelu i uprostřed písničky. V ten moment se však musí kapela na pódiu sebrat a vypadnout a uvolnit místo jiné kapele, která tam musí naběhnout, připravit si nástroje a pak začít hrát.

Takový koncert by pravděpodobně za moc nestál ale o to tady nejde.

Multithreading

Multithreading je přesně tento proces, který umí všechny běžné OS. OS je šílený velitel, kapely jsou jednotlivé programy.

Čas procesoru je každému programu přidělován.

Procesu který organizuje kdy který program bude běžet se v OS říká scheduler. Operace přepnutí mezi přidělením času z jednoho na druhý program se říká context switch 1.

Toto znamená, že souběžný běh programů je vlastně jen na oko. Procesory pořád zpracovávají instrukce za sebou.

Moderní procesory jsou však tak extrémně rychlé, že to v praxi vypadá, jako by umožňovaly souběžný běh více programů najednou.

Zdroj: Wikipedia

Jak pracuje scheduler?

Scheduler balancuje čas procesoru mezi všemi běžícími programy. Jak přesně toto balancování dělá je pro běžného ajťáka nepodstatný detail. Každé OS toto dělá jinak a navíc jde o mnohem komplexnější úlohu, než se zdá.

Scheduler toto balancování rozhoduje:

  • podle počtu jader na procesoru
  • podle aktuálního počtu běžících programů
  • podle aktuálních i historických statistik které si o běžících programech udržuje
  • podle uživatelem nastavených uživatelských priorit 2
  • podle uživatelem nastavených jader 3
  • atd.

Context switch

Context switch, jak už bylo řečeno, je proces přepnutí mezi přidělením času procesorového jádra z jednoho programu na jiný program. Tento proces, přestože není jednoduchý, je v moderních procesorech extrémně rychlý a v průměru trvá v řádech mikrosekund.

Během běžného provozu počítače proběhnou stovky až tisíce context switch za vteřinu (v závislosti na OS, počtu běžících programů atd.).


  1. V přirovnání výše to je proces výměny jedné kapely za druhou↩︎

  2. Přestože moderní OS umožňují uživatelům přidělovat běžícím programům jakési priority tak to není běžná praxe jak mezi běžnými uživateli tak i mezi běžnými ajťáky. ↩︎

  3. OS umožňují uživatelům určit, na jakém procesorovém jádře mají jednotlivé programy běžet. Stejně jako výše, není to běžná praxe. ↩︎