Sobes.tech
Middle

C# да жиптерлер (Thread) жана тапшырмалар (Task) арасындагы айырма эмнеде?

sobes.tech AI

AIден жооп

Тармактар (Thread) — бул ишти параллел жүргүзүү үчүн иштөө тутумунун төмөнкү деңгээлдеги абстракциясы. Тапшырмалар (Task) — бул .NETте жогорку деңгээлдеги түшүнүк, ал тармактардын пулуна негизделген жана асинхрон жана параллел программалоону жеңилдетет.

Негизги айырмачылыктар:

  • Абстракция деңгээли: Thread түздөн-түз иштейт ОС тармактары менен. Task — бул пландоочу тарабынан башкарылуучу абстракция (көбүнчө ThreadPool).
  • Башкаруу: Тармактарды кол менен башкаруу (жасоо, ишке киргизүү, токтотуу) кыйын болушу мүмкүн. Task пландоочу тарабынан башкарылат, бул алардын колдонулушун жеңилдетет.
  • Ресурстар: Жаңы тармак түзүү, Thread пулунан пайдалануудан көбүрөөк системдик ресурстарды талап кылат.
  • Кайтарылуучу маанилер жана исключения: Task кайтарылуучу маанилерди (Task<TResult>) алуу жана иштетилбеген исключенияларды иштетүү үчүн түзүлүштөргө ээ. Тармак үчүн бул кол менен ишке ашырылышы керек.
  • Асинхрондоштуруу: Task async жана await ачкыч сөздөрү менен тыгыз интеграцияланган, бул асинхрон код жазууну кыйла жеңилдетет. Тармак үчүн асинхрондоштуруу кол менен callbackтер же башка механизмдерди колдонуу талап кылынат.
  • Болтурлоо: Task болтурылышы CancellationToken аркылуу колдоо көрсөтүлөт. Тармак болтурылышы кол менен болтуруу механизмдерин ишке ашырууну талап кылат.

Жасоо жана күтүүнүн мисалы:

// Task колдонуу
async Task MyTaskAsync()
{
    await Task.Delay(100);
    Console.WriteLine("Тапшырма аяктады");
}

// Task'ты ишке киргизүү жана күтүү
Task t = MyTaskAsync();
await t;

// Тармак колдонуу (төмөнкү деңгээл)
Thread myThread = new Thread(() =>
{
    Thread.Sleep(100);
    Console.WriteLine("Тармак аяктады");
});

// Тармакты ишке киргизүү
myThread.Start();

// Тармактын аяктоосун күтүү (блоктоочу чакыруу)
myThread.Join();