Sobes.tech
Junior

Ce sunt firele în contextul programării?

sobes.tech AI

Răspuns de la AI

Thread (fir) — este cea mai mică unitate de execuție într-un sistem de operare multitasking. Este modul în care un program poate executa mai multe sarcini simultan în cadrul aceluiași proces.

Caracteristici cheie:

  • Partajarea resurselor: Thread-urile din același proces partajează spațiul de adrese comun, memoria și alte resurse ale procesului.
  • Costuri mai mici de suprasarcină: Crearea unui nou fir necesită mai puține resurse (timp și memorie) decât crearea unui nou proces.
  • Executare paralelă/competitivă: Thread-urile permit obținerea paralelismului (pe procesoare multi-core) sau concurenței (pe procesoare cu un singur nucleu).
  • Riscul de condiții de cursă: Deoarece thread-urile partajează memoria, există riscul de conflicte la accesul simultan la datele comune. Sunt necesare mecanisme de sincronizare (mutex-uri, semafoare).

În Flutter, se utilizează un model de execuție UI cu un singur fir, unde firul principal (UI thread) gestionează tot randarea, evenimentele de intrare și animațiile. Calculurile grele se realizează în izolate (isolates), care sunt procese separate cu propria memorie, interacționând prin porturi de mesaje.

// Exemplu de creare a unui izolat separat în Flutter pentru efectuarea de calcule grele
import 'dart:isolate';

Future<void> heavyComputation(SendPort sendPort) async {
  // Calcul...
  int result = 0;
  for (int i = 0; i < 1000000000; i++) {
    result += i;
  }
  sendPort.send(result); // Trimitem rezultatul înapoi
}

void main() async {
  final receivePort = ReceivePort();
  // Crearea izolatului și transmiterea portului pentru trimiterea rezultatelor
  await Isolate.spawn(heavyComputation, receivePort.sendPort);

  receivePort.listen((message) {
    print('Calculul s-a încheiat cu rezultatul: $message');
    receivePort.close(); // Închidem portul după primirea rezultatului
  });

  print('Calculul a fost inițiat într-un izolat separat...');
}

Diferențe între procese și fire de execuție:

Caracteristică Proces Fir de execuție
Spațiu de adresare Independent pentru fiecare proces Comun pentru firele din același proces
Resurse Diferite Partajate
Creare Costisitor (costuri mari de suprasarcină) Ieftin (costuri mai mici de suprasarcină)
Comunicare Mai complexă (IPC - Comunicare între procese) Mai simplă (acces la memorie partajată)
Reziliență la erori Căderea unui proces nu afectează pe ceilalți Căderea unui fir poate afecta procesul