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