Đồng thời kiểm soát

Đồng thời là một cách để thực thi nhiều thứ cùng một lúc. Trong một ứng dụng, Concurrency đề cập đến nhiều tác vụ chạy cùng lúc / đồng thời.

Đồng thời có thể làm cho ứng dụng của bạn nhanh hơn, sạch hơn và mang lại trải nghiệm tốt hơn cho người dùng. Việc sử dụng đa luồng có vẻ khó khăn đối với nhiều nhà phát triển, nhưng API nhưNSOperationDispatch Queues giúp bạn dễ dàng sử dụng đồng thời và đa luồng trong ứng dụng.

Grand Central Dispatch

GCD là API được sử dụng phổ biến nhất để quản lý mã đồng thời và thực thi các hoạt động không đồng bộ ở cấp hệ thống. GCD cung cấp và sử dụng hàng đợi nhiệm vụ. Các hàng đợi này là cấu trúc dữ liệu sử dụng thuật ngữ FIFO, nghĩa là tác vụ ở vị trí đầu tiên trong hàng đợi sẽ được thực thi trước và tác vụ cuối cùng của hàng đợi sẽ được thực hiện sau cùng.

Ví dụ - Giả sử một dòng đặt vé xem phim, nếu bạn là người cuối cùng thì bạn sẽ nhận được vé cuối cùng, và nếu có người đến sau bạn thì người đó sẽ nhận được vé sau bạn.

Hàng đợi gửi

Hàng đợi công văn là một cách dễ dàng để thực hiện một tác vụ không đồng bộ và đồng thời trong ứng dụng của bạn. Có hai loại hàng đợi -

  • Serial Queues - Chúng lưu trữ các tác vụ theo cách thức hàng loạt và thực hiện từng tác vụ một.

  • Concurrent Queues - Chúng lưu trữ các tác vụ theo cách thức hàng loạt và thực hiện từng tác vụ một.

Một số hàm được sử dụng để tạo hoặc lấy hàng đợi là:

dispatch_queue_create       
// create a serial or concurrent queue 
dispatch_queue_get_label     
// get the label of a given queue 
dispatch_get_main_queue   
// get the one and only main queue 
dispatch_get_global_queue    
// get one of the global concurrent queues

Thêm Công việc vào Hàng đợi

Có hai loại hàm, giúp thêm nhiệm vụ vào hàng đợi. Họ là -

Synchronous Functions -

  • dispatch_once - sẽ chỉ gửi nhiệm vụ khi nó kết thúc vòng đời của ứng dụng.

  • dispatch_sync - sẽ gửi một nhiệm vụ vào hàng đợi và chỉ trở lại khi nhiệm vụ được hoàn thành.

Asynchronous Functions -

  • Dispatch_async - sẽ gửi một nhiệm vụ và trở lại.

  • Dispatch_after - Trả hàng ngay lập tức nhưng chậm trễ trong một thời gian cụ thể.

  • Dispatch_async - trả về ngay lập tức nhưng nhiệm vụ được gửi nhiều lần.

Mã mẫu

Sau đây là mã ví dụ để thêm nhiệm vụ vào hàng đợi.

dispatch_async(dispatch_get_main_queue(), update_block);  
// add update_block to main queue  

dispatch_apply(i, some_queue, work_block)  
// add work_block to some_queue i times  

dispatch_sync(background_queue, blocking_block)  
// add blocking block to background queue and wait for completion

Ví dụ chung về sử dụng hàng đợi

Đoạn mã sau là một ví dụ về việc sử dụng hàng đợi.

dispatch_async(background_queue, ^ { 
   // Perform code that takes long time, here. 
   Dispatch_async(dispatch_get_main_queue(), ^ { 
      //Some other task, generally UI. 
   }); 
});

Đây là tất cả những gì chúng tôi sẽ làm với kiểm soát đồng thời, vì nó là đủ thông tin cho đến khi bạn trở thành Nhà phát triển iOS trung gian.

Tiếp tục thực hành các khái niệm bạn đã học và cố gắng sửa đổi và tích hợp chúng theo yêu cầu của bạn.