Dart cho phép chúng tôi lập trình không đồng bộ chạy chương trình của chúng tôi mà không bị chặn. Lập trình không đồng bộ được sử dụng để đạt được tính đồng thời. Dart Isolates là một phiên bản của chủ đề. Nhưng có sự khác biệt chính giữa việc triển khai phổ biến của “Thread” hoặc “Isolates” . Tính năng Isolates hoạt động khác so với Thread. Các vùng isolate là các nhân viên độc lập không chia sẻ bộ nhớ mà thay vào đó kết nối với nhau bằng cách truyền thông điệp qua các kênh. Vì các phân lập hoàn thành nhiệm vụ của nó bằng cách chuyển thông điệp, do đó nó cần một cách để tuần tự hóa một thông báo.
Các bài viết liên quan:
Giao tiếp giữa các vùng isolate được thực hiện bằng cách truyền thông điệp dưới dạng máy khách và máy chủ. Nó giúp chương trình tận dụng lợi thế của bộ vi xử lý đa lõi.
Dart cung cấp gói dart: Isolates để áp dụng phần Isolates trong chương trình của chúng tôi. Nó cung cấp giải pháp lấy mã Dart đơn luồng và cho phép ứng dụng sử dụng nhiều hơn phần cứng có sẵn.
Tạo và Bắt đầu một Isolate
Dart cung cấp phương thức spawn () để tạo một vùng isolate. Nó phải được khai báo với một ‘điểm vào’ với một tham số duy nhất. Tham số này hiển thị một cổng Isolates việc sử dụng để tham chiếu lại tin nhắn thông báo.
Hãy hiểu ví dụ sau:
Ví dụ:
import 'dart:isolate'; void sayhii(var msg){ print('execution from sayhii ... the message is :${msg}'); } void main(){ Isolate.spawn(sayhii,'Hello!!'); Isolate.spawn(sayhii,'Whats up!!'); Isolate.spawn(sayhii,'Welcome!!'); print('execution from main1'); print('execution from main2'); print('execution from main3'); }
Giải trình:
Trong chương trình trên, phương thức sinh sản của lớp Isolates đã thực thi một hàm sayhii song song với mã còn lại. Nó có hai tham số.
- Hàm mà chúng ta muốn tạo ra và chuỗi sẽ được chuyển cho hàm được tạo.
Chúng ta có hai hàm sayhii () và hàm main () có thể không chạy theo thứ tự mỗi lần. Nếu bạn chạy chương trình trên, thì kết quả đầu ra mỗi lần sẽ khác nhau như chúng ta có thể thấy trong đầu ra thứ hai.
Lưu ý – Chúng ta cũng có thể truyền giá trị NULL nếu không có đối tượng nào để truyền trong hàm được tạo.
Hãy hiểu một ví dụ khác –
Ví dụ – 2
void start() async { ReceivePort receiverPort = ReceiverPort(); // Port for isolate to receive message. isolate = await Isolate.spawn(runTimer, receiverPort.sendPort); receivePort.listen((data){ stdout.write('Receiving: '+ data + ', '); }); } void runTimer(SendPort, sendPort) { int coun = 0; Timer.periodic(new Duration(seconds: 1), (Timer t) { count++; String msg = 'notification ' + count.toString(); stdout.write('Sending: ' + msg + ' -'); sendPort.send(msg); }); }
Giải trình:
Trong đoạn mã trên, chúng ta đã tạo một phương thức không đồng bộ start () để tạo một cổng và tạo ra một vùng isolate. Chúng tôi đã ký hiệu phương thức bắt đầu là không đồng bộ vì wan có thể chờ phản hồi từ quá trình sinh sản của các chủng phân lập và lưu trữ một tham chiếu đến chủng phân lập mới. Nó là điều cần thiết khi chúng ta muốn tiêu diệt những thread Isolates đang chạy. Chúng tôi đã truyền hai tham số trong phương thức spawn () , tham số đầu tiên là phương thức runTimer , là một hàm gọi lại để thực thi runTimer () và tham số thứ hai sendPort là một hàm gọi lại và nó sẽ được sử dụng để gửi thông báo trở lại người gọi. Phương thức start () bắt đầu lắng nghe receiverPortcho tin nhắn từ Isolates . Khi nó sẽ nhận được thông báo thì nó sẽ in ra dưới dạng đầu ra của bảng điều khiển.
Phương thức runTimer () bắt đầu bộ đếm thời gian kích hoạt mỗi giây để cập nhật bộ đếm. Nó gửi một tin nhắn thông báo qua cổng mà nó nhận được khi cá thể phân lập được sinh sản.
Dừng một Isolate
Gói dart: Isolates cung cấp phương thức kill () được sử dụng để dừng một chương trình Isolates đang chạy.
Hãy hiểu ví dụ sau.
Ví dụ –
void stop() { If (isolate != null) { stdout.writeln('Stopping Isolate'); isolate.kill(priority: Isolate.immediate); isolate = null; } }
Giải trình:
Trong ví dụ trên, chúng ta đã khai báo một phương thức stop () sẽ phá hủy vùng isolate đang chạy và đặt tham chiếu của nó thành null. Chúng tôi đã xác định mức độ ưu tiên của sự Isolates: ngay lập tức sẽ chấm dứt sự Isolates ngay sau đó.