Sobes.tech
Junior

Čo sú to vlákna v kontexte programovania?

sobes.tech AI

Odpoveď od AI

Vlákn (thread) je najmenšia jednotka vykonávania v multitaskovom operačnom systéme. Je to spôsob, akým program môže vykonávať niekoľko úloh súčasne v rámci jedného procesu.

Kľúčové charakteristiky:

  • Zdieľanie zdrojov: Vlákna v jednom procese zdieľajú spoločný adresný priestor, pamäť a ďalšie zdroje procesu.
  • Menšie náklady: Vytvorenie nového vlákna si vyžaduje menej zdrojov (času a pamäti) než vytvorenie nového procesu.
  • Paralelné/kontinuálne vykonávanie: Vlákna umožňujú dosiahnuť paralelizmus (na viacjadrových procesoroch) alebo konkurenciu (na jednojadrových).
  • Riziko závodných podmienok: Pretože vlákna zdieľajú pamäť, hrozí riziko konfliktov pri súčasnom prístupe k spoločným dátam. Vyžadujú mechanizmy synchronizácie (muteksy, semafory).

V Flutteri sa používa model jednoláknového vykonávania UI-kódu, kde hlavný vlákno (UI thread) spracováva všetky vykresľovanie, udalosti vstupu a animácie. Těžké výpočty sa vykonávajú v izolátoch (isolates), ktoré predstavujú samostatné procesy s vlastnou pamäťou, komunikujúce cez porty správ.

// Príklad vytvorenia samostatného izolátu vo Flutteri pre vykonávanie ťažkých výpočtov
import 'dart:isolate';

Future<void> heavyComputation(SendPort sendPort) async {
  // Výpočty...
  int result = 0;
  for (int i = 0; i < 1000000000; i++) {
    result += i;
  }
  sendPort.send(result); // Odoslanie výsledku späť
}

void main() async {
  final receivePort = ReceivePort();
  // Vytvorenie izolátu a odovzdanie portu na odoslanie výsledkov
  await Isolate.spawn(heavyComputation, receivePort.sendPort);

  receivePort.listen((message) {
    print('Výpočet ukončený s výsledkom: $message');
    receivePort.close(); // Zatvorenie portu po obdržaní výsledku
  });

  print('Výpočet začal v samostatnom izoláte...');
}

Rozdiely medzi procesmi a vláknami:

Charakteristika Proces Vlákno
Adresný priestor Samostatný pre každý proces Spoločný pre vlákna v jednom procese
Zdroje Rôzne Zdieľané
Vytváranie Nákladné (väčšie režie) Lacnejšie (menšie režie)
Komunikácia Zložitejšia (IPC - medziprocesová komunikácia) Jednoduchšia (prístup ku spoločnej pamäti)
Odolnosť voči chybám Pád jedného procesu neovplyvní ostatné Pád vlákna môže ovplyvniť proces