Sobes.tech
Middle

Asinxronluq və çox ipliklilik arasındakı əlaqə nədir?

sobes.tech Süni İntellekt

AI-dan cavab

Asinxronluq, əsas icra axını bloklamadan eyni zamanda bir neçə əməliyyatı yerinə yetirməyə imkan verən proqramlaşdırma modelidir. Çoxmərtəbəlik (multithreading) isə, eyni proses daxilində bir neçə iş parçacığını işlətməyə imkan verən mexanizmdir.

Əlaqə odur ki, çoxmərtəbəlik, asinxronluğun həyata keçirilməsinin bir yoludur. C#-da async/await istifadə etdiyiniz zaman, tərtibçi arxa planda asinxron əməliyyatları yerinə yetirmək üçün işçi hovuzundan istifadə edə bilən kodlar yaradır. Bu, əsas iş parçacığının uzunmüddətli əməliyyatların (məsələn, giriş/çıxış) tamamlanmasını gözləmədən davam etməsinə imkan verir.

Lakin, asinxronluq hər zaman çoxmərtəbəlik tələb etmir. Məsələn, asinxron giriş/çıxış əməliyyatları hardware-interruptlər və ya sistem nüvəsi istifadə edilərək, yeni iş parçacığı yaratmadan həyata keçirilə bilər.

Buna görə də, çoxmərtəbəlik, asinxron tapşırıqları yerinə yetirmək üçün istifadə edilən iş parçacılarını təmin edir, lakin asinxronluq anlayışı daha genişdir və digər üsullarla da həyata keçirilə bilər.

Əsas fərqlər:

Xüsusiyyət Asinxronluq Çoxmərtəbəlik
Məqsəd Əsas icra axını bloklamamaq. Kodu paralel şəkildə icra etmək.
Model Gecikmiş şəkildə tamamlanabilən tapşırıqlara əsaslanır. Eyni zamanda işləyən iş parçacıklarına əsaslanır.
İcra İş parçacqları, callbacklər, sonlu avtomatlar istifadə edə bilər. İş parçacqlarının yaradılması və idarə olunması tələb olunur.
Xərclər I/O üçün daha az, CPU-bound üçün daha çox ola bilər. Ümumiyyətlə, iş parçacığı kontekst dəyişmələri səbəbindən daha yüksəkdir.

İş parçacığı istifadə edilərək asinxron əməliyyat nümunəsi:

// İş parçacığı hovuzundan istifadə edən async/await nümunəsi
public async Task<string> GetDataAsync()
{
    // Uzunmüddətli I/O əməliyyatlarının simulyasiyası
    await Task.Delay(1000);
    return "Məlumat";
}

Açıq iş parçacığı ilə nümunə:

// Birbaşa iş parçacığı yaradılması və idarə olunması nümunəsi
Thread thread = new Thread(() =>
{
    // Ayrı bir iş parçacığında tapşırıq yerinə yetirmək
    Console.WriteLine("Ayrı bir iş parçacığında işləyir");
});
thread.Start();