Sobes.tech
Junior

Kas yra konkurencingumas daugialypės srauto kontekste?

sobes.tech AI

Atsakymas iš AI

Konkurencija yra sistemos gebėjimas vienu metu vykdyti kelias užduotis, kurios gali dalintis bendrais ištekliais. Multithreading kontekste tai pasiekiama paleidus kelis srautus, iš kurių kiekvienas gali apdoroti savo užduotį.

Pavyzdžiai mechanizmų, kurie pasiekia konkurenciją C#:

  • Thread klasė: Tiesioginis srautų kūrimas ir valdymas.
    // Naujo srauto kūrimas
    Thread newThread = new Thread(() => {
        // Kodas, vykdomas naujame sraute
    });
    newThread.Start(); // Srauto paleidimas
    
  • Srautų baseinas (ThreadPool): Srautų pakartotinis naudojimas, siekiant sumažinti jų kūrimo ir naikinimo išlaidas.
    // Užduoties įkėlimas į srautų baseiną
    ThreadPool.QueueUserWorkItem((state) => {
        // Kodas, vykdomas sraute iš baseino
    });
    
  • Užduotys (Task): Aukštesnio lygio abstrakcija virš srautų, dalis Task Parallel Library (TPL). Patogiau naudoti asinchroninėms operacijoms.
    // Užduoties kūrimas ir paleidimas
    Task.Run(() => {
        // Kodas, vykdomas užduotyje
    });
    

Konkurencija gali sukelti problemų prieigą prie bendrų duomenų (varžybų sąlygos, užrakto blokavimai), todėl reikalinga sinchronizacijos mechanizmų naudojimas:

  • lock
  • Mutex
  • Semaphore
  • Monitor