+1

Dispatch Queue trong swift - Phần 1 (Cơ Bản)

“ Ngày nay CPU có thể chạy được nhiều lõi vì thế chúng ta có thể chạy được đa luồng “

Đúng vậy , nó là một trong những cải tiến lớn nhất trong lĩnh vực công nghệ . Chính vì thế trong Swift , chúng ta có thể tận dụng nó thông qua Dispatch Queue.

Dispatch Queue, nhìn vào cái tên chắc hẳn các bạn cũng đoán được ý nghĩa của nó , nó quản lý việc thực hiện các phần công việc mà nó được giao.

Có 2 loại Dispatch Queue , serial ( Thực thi tuần tự , xử lý xong luồng này rồi mới đến luồng kia ) và concurrent ( Thực thi song song) . Nó cũng có 2 kỹ thuật dispatching , 1 là sync (Chặn luồng đang gọi cho đến khi nó thực hiện song) , còn lại là async (Không chặn luồng đang gọi).

Dưới đây là một ví dụ về serial queue làm việc bất đồng bộ . Vì nó là serial queue , tất cả được thực hiện theo thứ tự , chúng được thêm vào lần lượt . Các tác vụ thực hiện một cách tuần tự luôn được thực thi một lần tại một luồng duy nhất .

Trước khi bắt đầu đến concurrent queue , có một điển quan trọng đó là “QOS” - Quality of Services ( Chất lượng dịch vụ ).

Khi chúng ta sử dụng concurrent queue, có nghĩa là nhiều tác vụ sẽ được thực hiện đồng thời và đôi khi nó cần ưu tiên cho một tác vụ đặc biệt vì nó quan trọng. Tác vụ sẽ được thực hiện theo thứ tự ưu tiên giảm dần. Vì vậy, tầm quan trọng và sự ưu tiên của một tác vụ phụ thuộc vào QOS .

Để tạo concurrent queue, chúng ta phải truyền các thuộc tính là concurrent. Là tính năng bổ sung, chúng ta có thể thiết lập mức độ ưu tiên của tác vụ bằng cách cung cấp QOS. Nhớ trong concurrent queue, các tác vụ được thực hiện theo thứ tự chúng được thêm vào nhưng với các chủ đề khác nhau gắn liền với queue. Nó không được hỗ trợ để hoàn thành tác vụ theo thứ tự chúng được thêm vào. Thứ tự của các tác vụ là khác nhau .

Dưới đây là ví dụ minh hoạ về concurent queue , nếu bạn nhìn vào kết quả bạn có thể thấy hàm smile() và love() đang thực thi song song :

Đây là những thứ cơ bản nhất của Dispatch Queue .Ở bài viết tiếp theo mình sẽ thảo luận thêm về DispatchWorkItem, Semaphore, DispatchGroup và các lợi ích khác của Dispath Queue

Hẹn gặp lại các bạn trong bài viết sau . Thanks for watching ❤️


All rights reserved

Viblo
Hãy đăng ký một tài khoản Viblo để nhận được nhiều bài viết thú vị hơn.
Đăng kí