Sobes.tech
Junior

Czym jest konkurencyjność w kontekście wielowątkowości?

sobes.tech AI

Odpowiedź od AI

Współbieżność to zdolność systemu do jednoczesnego wykonywania wielu zadań, które mogą dzielić wspólne zasoby. W kontekście wielowątkowości osiąga się to poprzez uruchomienie wielu wątków, z których każdy może obsługiwać swoje zadanie.

Przykłady mechanizmów osiągających współbieżność w C#:

  • Klasa Thread: Bezpośrednie tworzenie i zarządzanie wątkami.
    // Tworzenie nowego wątku
    Thread newThread = new Thread(() => {
        // Kod wykonywany w nowym wątku
    });
    newThread.Start(); // Uruchomienie wątku
    
  • Pula wątków (ThreadPool): Ponowne użycie wątków w celu zmniejszenia kosztów ich tworzenia i niszczenia.
    // Umieszczenie zadania w puli wątków
    ThreadPool.QueueUserWorkItem((state) => {
        // Kod wykonywany w wątku z puli
    });
    
  • Zadania (Task): Wyższy poziom abstrakcji nad wątkami, część biblioteki Task Parallel Library (TPL). Bardziej przydatne dla operacji asynchronicznych.
    // Tworzenie i uruchamianie zadania
    Task.Run(() => {
        // Kod wykonywany w zadaniu
    });
    

Współbieżność może prowadzić do problemów przy dostępie do danych współdzielonych (warunki wyścigu, deadlocki), co wymaga użycia mechanizmów synchronizacji takich jak:

  • lock
  • Mutex
  • Semaphore
  • Monitor