Bài viết này giành cho ai?
Lập trình đồng nhất là 1 chuyên môn xây dựng trung cấp cho. Để đọc được bạn cần phải thân quen cùng với những API bất đồng hóa nlỗi URLSession, cùng thuận lợi viết với sử dụng đông đảo completion handler closures. Nếu chúng ta không biết phần nhiều sự việc trên, chúng ta cũng có thể liếc qua như 1 tài liệu tham khảo, với đừng bắt mình buộc phải phát âm hết vấn đề.
Bạn đang xem: Concurrency là gì
Yếu tố lịch sử
Trong lịch sử vẻ vang trở nên tân tiến máy vi tính, khối lượng quá trình lớn nhất nhưng mà máy vi tính hoàn toàn có thể cách xử lý vào một đơn vị chức năng thời hạn được ra quyết định vày tốc độ đồng hồ của CPU. Để tăng tốc CPU cùng thu bé dại chip cung cấp dẫn, fan ta nỗ lực nén một lượng phệ các đèn bán đưa vào trong một diện tích S nhỏ dại độc nhất vô nhị. Tuy nhiên cuộc đua tăng tốc mang đến lõi CPU bị tạm dừng do các số lượng giới hạn về phần cứng cùng ánh sáng.Để liên tục tăng speed cho CPU, người ta bước đầu search một phương án khác để tăng tổng công suất của CPU lên, đôi khi tăng công suất tiêu thú điện. Và phương án chính là đưa những lõi rộng vào trong một CPU cầm cho 1 lõi. Việc cách xử trí được chuyển đến các Vi xử lý Core thuộc cách xử lý, vì vậy tổng tính năng được tạo thêm.Thoạt đầu, Giải pháp nghe dường như rất thú vị tuy thế vụ việc lại nằm ở vị trí mềm. Để tận dụng tối đa được điểm mạnh cách xử trí những core trong số vận dụng thì không hẳn là dễ dàng và đơn giản.Trong vượt khđọng, nhằm áp dụng được những core này, chúng ta bắt buộc cách xử lý Việc khởi tạo nên với cai quản các thread này một phương pháp thủ công bằng tay. Việc này đích thực trở ngại với phần nhiều các thiết kế viên, do việc xác định được số lượng về tối ưu của những thread trong từng yếu tố hoàn cảnh dựa vào khối lượng thiết lập khối hệ thống hiện thời , và phần cứng sống dưới là không còn dễ dàng và đơn giản.
Để cách xử lý vấn đề khó khăn này, cả iOS và OSX đặt ra một bí quyết tiếp cận khác đến việc cách xử trí đôi khi đó là: Tgiỏi vày phải khởi tạo những threads một cách trực tiếp, những áp dụng chỉ dễ dàng là gửi các task vào các mặt hàng ngóng Queue. Còn bài toán khởi chế tạo các thread vắt làm sao, từng nào thread được đẩy đến hệ thống quyết định. Bằng phương pháp để mang đến hệ thống làm chủ làm chủ các thread, các áp dụng hoàn toàn có thể giành được một mức độ linc hoạt cơ mà giải pháp xử trí cũ ko bao giờ dành được. Đồng thời lập trình viên đã đạt được một quy mô xây dựng đơn giản và dễ dàng nhưng kết quả rộng.
Concurrency là gì?
Xử lý đồng thời - Concurrency - là bài toán nhiều task được giải pháp xử lý cùng một thời điểm.
Tại sao app của bọn họ lại phải cách xử lý bên cạnh đó - Concurrency?
Để giữ lại cho UI luôn vào tâm trạng được thỏa mãn nhu cầu.Tăng tốc độ cách xử lý, tận dụng tối đa tối nhiều sức khỏe của kiến trúc chip đa nhân.Nếu bọn họ xử trí một task non-UI nặng nề trên main thread, task này vẫn bloông chồng lại main thread với tiện ích của chúng ta quan yếu đón nhận được hầu hết can dự của người tiêu dùng nữa.

Trong thời điểm này họ bắt buộc đưa các tác vụ nặng trĩu non-UI task sang 1 thread khác để giải pháp xử lý, và main thread đã tiếp tục làm các trách nhiệm không giống trong các số ấy có trách nhiệm đặc biệt nhất là mừng đón đầy đủ liên quan của người dùng.

Một số quan niệm của xây dựng đồng thời
Concurrency
Concurrency không chỉ có là một trong có mang mang lại máy có chip những nhân. Trong mọi trang bị 1-1 nhân, họ vẫn hoàn toàn có thể cách xử trí được đa luồng phụ thuộc vào lý lẽ time-slicing nhằm chuyển ngữ cảnh.

Queue
Queue là hàng hóng các các bước, hoạt động theo lý lẽ FIFO, task nào vào trước thì sẽ được thực hiện trước, task làm sao vào sau cùng sẽ tiến hành triển khai sau.Có nhị các loại hàng đợi:Serial Queue: là sản phẩm ngóng tiến hành theo tuần từ. Trong một thời điểm chỉ có 1 task được thực hiện. Khi làm sao task này thực thi dứt thì task khác new ban đầu.lấy ví dụ tiêu biểu vượt trội của sản phẩm hóng này là Main thread.

Concurrent Queue: là hàng hóng thực hiện bên cạnh đó. Trong một thời điểm hoàn toàn có thể có nhiều task được tiến hành và một dịp. Hệ thống đã tuỳ vào tải bây giờ của hệ thống và cấu hình Hartware thực tế để tạo cùng cấp phép các Thread để giải pháp xử lý những tác vụ.

So sánh thân Serial Queue với Concurrent Queue

Synchronous cùng Asynchronous
Đầu vào của các queue là các closure. Các closure này được đánh dấu về cách thức thực hiện nó trước khi gửi mang đến một queueCó hai cách thức tiến hành của một closure:Nếu task đánh dấu là Synchronous thì task này đang block lại queue nhưng nó được Call, ko chất nhận được queue kia triển khai thêm task như thế nào không giống trong thời hạn nó đang chạy.Nếu task được lưu lại là Asynchronous thì task này được call cùng ngay tiếp đến nó trả quyền điều khiển cho hàm gọi nó với mặt hàng đợi đang triển khai một closure tiếp theo sau (ví như có đầy đủ queue nhằm thực thi).
Mối quan hệ nam nữ giữa Synchronous, Asynchronous VS Serial Queue, Concurrent Queue
Synchronous, Asynchronous là phương thức thực hiện của 1 task.Serial Queue, Concurrent Queue là đích mang đến của task đó.
Synchronous, Asynchronous nói cho bạn biết là queue hiện giờ bao gồm yêu cầu đợi task xong xuôi rồi bắt đầu Gọi task bắt đầu hay khôngSerial Queue, Concurrent Queue thì cho mình biết là với queue hiện giờ, bạn có một thread giỏi nhiều thread. 1 Task được thực hiện 1 thời điểm tốt các task được thực hiện đôi khi.
Trường hòa hợp gửi 2 async task vào serial queue
func simpleQueues() { let queue = DispatchQueue(label: "com.bigZero.GCDSamples") queue.async { for i in 0..
