Sobes.tech
Junior

Kas yra procesas ir srautas? Kuo jie skiriasi?

sobes.tech AI

Atsakymas iš AI

Procesas – tai vykdoma programa, turinti savo adresų erdvę, išteklius (failų aprašus, tinklo jungtis) ir vykdymo kontekstą.

Vykdymo srautas (gija, thread) – tai mažiausia vykdymo vienetas procese. Procesas gali turėti vieną arba kelis srautus, kurie dalijasi jo ištekliais, bet turi savo iškvietimo steką, vykdymo kontekstą ir komandinį skaitiklį.

Pagrindiniai skirtumai:

Savybė Procesas Srautas
Izoliacija Visiška. Vienas procesas neveikia kito. Dalinė. Srautai dalijasi proceso ištekliais.
Duomenų mainai Per IPC (tarpprocesinis bendravimas). Lengvas. Per bendrus kintamuosius proceso ribose.
Konteksto perjungimas Brangus. Reikalauja išsaugoti ir atkurti visą proceso būseną. Pigiau. Reikalauja išsaugoti ir atkurti srauto būseną.
Kūrimas Brangus. Reikalauja išteklių paskirstymo. Pigiau. Reikalauja išskirti steką.
Pabaiga Procesų pabaiga sukelia visų jo srautų pabaigą. Srauto pabaiga neturi įtakos kitiems srautams ar procesui.

Pavyzdys, kaip sukurti procesą Java:

// Java
Process process = Runtime.getRuntime().exec("ls -l");
// Tolimesnis darbų su procesu: įvesties/išvesties gavimas ir t.t.

Pavyzdys, kaip sukurti srautą Java:

// Java
Runnable task = () -> {
    System.out.println("Labas iš srauto: " + Thread.currentThread().getName());
};

Thread thread = new Thread(task);
thread.start(); // Srauto paleidimas