Thread trong C# là gì

Thread trong C# là gì

  1. Thread trong C# là gì?
  2. Đồng bộ (Synchronous) và Bất đồng bộ (Asynchronous) trong c#

1. Thread trong C# là gì?

Tôi ví dụ thực tế để các bạn dễ hiểu: bạn nhìn 2 phép tính sau: 5x6 và 7x8 thì bạn không thể nào làm 2 phép tính cùng 1 lúc, bạn chỉ làm 1 trong 2, làm xong 5x6 rồi mới đến 7x8 (hay ngược lại).

Thead là định nghĩa chỉ có trong máy tính, đối với con người một lúc không thể làm 1 lúc 2 phép tính được.

Đến đến bạn sẽ dẫn hiểu Thead trong lập trình là gì ?

Với người không thể làm 2 phép tính cùng 1 lúc, nhưng máy tính tính làm được.

Nếu viết code dạng thông thường

int pheptinh_01=5x6;
int pheptinh_02=5x6;

Thì cũng như con người, máy tính làm phép tính 01 trước rồi đến 02.

Nếu áp dụng kỹ thuật code Thread (bất đồng bộ) vào máy tính sẽ xử lý 2 phép tính cùng 1 lúc.

Hai định nghĩa bạn cần nắm được trong C# cũng như các ngôn ngữ khác đó là

2. Đồng bộ (Synchronous) và Bất đồng bộ (Asynchronous) trong c#

Thì Đồng bộ (Synchronous) là thực hiện code theo thứ tự, code nào trước thì thực thi trước, code nào sau thì thực thi sau.

Bất đồng bộ (Asynchronous): không theo thứ tự, mà có thể thực hiện song song cùng 1 lúc 2 hay nhiều tác vụ nào đó.

Ví dụ đồng bộ (Synchronous) trong c#

static void Main(string[] args)
{
    var w = new System.Diagnostics.Stopwatch();
    w.Start();
    XuLy01();
    XuLy02();
    w.Stop();
    Console.WriteLine($"Thời gian thực thi: {w.ElapsedMilliseconds}");
    Console.ReadKey();
}
// Giải thích: đoạn code trên tương tự như, bởi vì khi ứng dụng chạy thì thread MAIN đã khởi tạo, nhưng để đếm được thời gian thực thi code mình thêm vào đối tượng System.Diagnostics.Stopwatch

static void Main(string[] args)
{  
    XuLy01();
    XuLy02();
    Console.ReadKey();
}


private static void XuLy01()
{
    Thread.Sleep(6000);
    Console.WriteLine("Xu ly 01");
}
private static void XuLy02()
{
    Thread.Sleep(2000);
    Console.WriteLine("Xu ly 02");
}

 :fm}}

Ví dụ bất đồng bộ (Asynchronous)

 

 static void Main(string[] args)
 {
     var w = new System.Diagnostics.Stopwatch();
     w.Start();
     Thread thr_01 = new Thread(XuLy01);
     Thread thr_02 = new Thread(XuLy02);
     thr_01.Start();
     thr_02.Start();

     // chặn lệnh không cho chạy xuống dưới
     // nếu bỏ 2 lệnh join dưới thì lệnh chạy luôn xuống dưới khi thực hiện thr_01,thr_02
     thr_01.Join();
     thr_02.Join();
     w.Stop();
     Console.WriteLine($"Thời gian thực thi: {w.ElapsedMilliseconds}");
     Console.ReadKey();
 }
 private static void XuLy01()
 {
     Thread.Sleep(3000);
     Console.WriteLine("Xu ly 01");
 }
 private static void XuLy02()
 {
     Thread.Sleep(2000);
     Console.WriteLine("Xu ly 02");
 }

//Chạy code các bạn để ý, đúng ra là XuLy01 chạy trước rồi tới XuLy02, nhưng XuLy02 lại chạy trước để chứng mình là 2 hàm này được chạy song song với nhau.

 

 

 

Thread trong C# là gì