Skip to content

Dashboard

Phân biệt asynchronous và multithread trong Dart

Created by Admin

Khi bắt đầu tìm hiểu sâu về Asynchronous và Isolate trong Dart có rất nhiều bạn đang bị nhầm lẫn giữa 2 khái niệm đồng thời (concurrency) và song song (paralleism) trong Dart. Để có thể hiểu rõ hơn về 2 khái niệm này thì trước tiên chúng ta phải làm rõ 1 số các khái niệm cơ bản về Dart như sau :

  1. Dart is a Single Threaded language

Dart là 1 ngôn ngữ đơn luồng cho nên Dart thực hiện từng tác vụ một, hết tác vụ này đến tác vụ khác nghĩa là miễn là một thao tác đang thực thi, nó không thể bị gián đoạn bởi bất kỳ đoạn code nào khác. Nói cách khác, nếu bạn chạy một purely synchronous method , thì phương thức sau sẽ là phương thức duy nhất được thực thi cho đến khi hoàn tất. Ví dụ:

void myBigLoop(){
    for (int i = 0; i < 10000000; i++){
        _doSomethingSynchronously();
    }
}

Trong ví dụ trên, việc thực thi phương thức myBigLoop () sẽ không bao giờ bị gián đoạn cho đến khi nó hoàn thành. Do đó, nếu phương thức này mất một thời gian, ứng dụng sẽ bị "block" trong suốt quá trình thực thi toàn bộ phương thức.!

2.The Dart execution model

Khi bạn run một Flutter App (hoặc bất kỳ ứng dụng Dart nào), một quy trình Thread mới (trong ngôn ngữ Dart = “Isolate”) sẽ được tạo và khởi chạy. Luồng này sẽ là luồng duy nhất mà bạn phải quan tâm cho toàn bộ ứng dụng.

  • khởi tạo 2 queue, đó là FIFO “MicroTask Queue ” và “Event Queue”
  • thực thi phương thức main () và khi quá trình thực thi mã này hoàn tất
  • Khởi chạy Event Loop

Trong toàn bộ vòng đời của chuỗi, một quy trình nội bộ và vô hình, được gọi là “Event Loop”, sẽ điều khiển cách mã của bạn sẽ được thực thi và theo thứ tự trình tự nào, tùy thuộc vào nội dung của cả “MicroTask Queue ” và “Event Queue”. Event Loop là 1 vòng lặp vô hạn, nó đảm nhiệm 1 nhiệm vụ chính là kiểm tra xem nếu các sự kiện trong MicroTask Queue trống thì sẽ đẩy các sự kiện của Event Queue vào main Isolate rồi thực thi nó .

Như chúng ta có thể thấy Hàng đợi MicroTask được ưu tiên hơn Event Queue nhưng 2 hàng đợi đó được sử dụng để làm gì? Hãy cùng mình tìm hiểu nhé :

3.MicroTask Queue

Source: https://viblo.asia/p/phan-biet-asynchronous-va-multithread-trong-dart-XL6lA084Zek