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();