Kihagyás

1. előadás

Kozsik Tamás Oktató

Kezdés: 10:

Követelmények

  • 20 pont Gyak röpzh (2 pont x 10 hét)
  • 15 pont Beadandó (10-11. hét körül kerül ki)
  • Év végén zárthelyi:
    • 50 pont Gyak ZH
    • 15 pont Elm ZH

Miért is akarunk ilyesmiről tanulni?

Párhuzamosság => a program egyszerre több dolgot is csinálhat

Hardveres:

  • Többmagos processzor
  • Több processzor

Szoftveres:

  • Egy processzor több programot futtathat (process)
  • Egy program több szálat futtathat (thread)

Cél:

  • hatékonység növelése
  • több felhasználó kiszolgálása
  • program logikai tagolása
    • pl. egy szál a UI-ért, egy a hálozati kommunikációhoz

Kommunikációs modellek

  • megosztott (shared) memória
    • Több processzor, ugyan az a memóriaterület
  • elosztott (distributed) memória
    • Több processor, saját memóriával
    • kommunikációs csatornák, üzenetküldés

Mit tudunk csinálni, ha kevesebb processzorunk van, mint folyamatunk?

A processzorokat kapcsolgatjuk a folyamatok között, mindegyik csak kis ideig futna fut

Párhuzamosság egy folyamaton belül

  • Végrehajtási szálak
  • Pehelysúlyú (lightweight, kevés költségű)
  • közös memória (megosztott jelleg)

Szálak nehézségei

  • nemdeterminisztikusság
  • nehéz átlátni a halandó embernek
  • kezelendő
    • ütemzés
    • interferencia
    • szinkronizáció
    • kommunikáció
  • nehéz reprodukció

Szálak a Java™️-ban

beépített támogatás: java.lang

  • Nyelvi fogalom:
  • Támogató osztály: java.lang.Thread
  • a főprogram egy végrehajtási szál
  • további szálak hozhatók létre: Thread osztály példányosítása
  • start() metódussal elindítható a szál
  • A szál programja a run() metódusában van
public class Hello {
    public static void main(String args[]){
        (new MyThread()).start();
    }
}

public class MyThread extends Thread {
    @Override
    public void run(){
        while (true){
            System.out.println("Hi!");
        }
    }
}

Ütemzési stratégiák

  • Run to completion: egy szál addig fut, amíg csak lehet (hatékonyabb)
  • Preemptive: időosztásos ütemzés (igazságosabb)