Chỉ được đăng trong một câu trả lời khác nhau, nhưng đây là một cái gì đó tôi đã viết khá một thời gian trở lại:
Cách tốt nhất để khái niệm hàng đợi là lần đầu tiên nhận ra rằng ở mức độ thấp rất, chỉ có hai loại hàng đợi: nối tiếp và đồng thời.
Hàng đợi nối tiếp là một vợ một chồng nhưng không được cam kết. Nếu bạn cung cấp cho một loạt các nhiệm vụ cho mỗi hàng đợi nối tiếp, nó sẽ chạy chúng mỗi lần, chỉ sử dụng một luồng tại một thời điểm. Khía cạnh không cam kết là hàng đợi nối tiếp có thể chuyển sang một luồng khác giữa các nhiệm vụ. Hàng đợi nối tiếp luôn chờ một công việc hoàn thành trước khi chuyển sang mục tiếp theo. Do đó các nhiệm vụ được hoàn thành theo thứ tự FIFO. Bạn có thể tạo bao nhiêu hàng đợi nối tiếp khi cần với dispatch_queue_create
.
Hàng đợi chính là hàng đợi nối tiếp đặc biệt. Không giống như các hàng đợi nối tiếp khác, mà không được cam kết, trong đó họ "đang hẹn hò" nhiều chủ đề nhưng chỉ một lần, hàng đợi chính là "kết hôn" với chủ đề chính và tất cả các tác vụ được thực hiện trên đó.Công việc trên hàng đợi chính cần phải hoạt động tốt với runloop để các hoạt động nhỏ không chặn giao diện người dùng và các bit quan trọng khác. Giống như tất cả các hàng đợi nối tiếp, các tác vụ được hoàn thành theo thứ tự FIFO.
Nếu hàng đợi nối tiếp là một vợ chồng, thì hàng đợi đồng thời là không liên quan. Họ sẽ gửi nhiệm vụ cho bất kỳ chủ đề có sẵn hoặc thậm chí tạo chủ đề mới tùy thuộc vào tải hệ thống. Họ có thể thực hiện nhiều tác vụ đồng thời trên các chủ đề khác nhau. Điều quan trọng là các tác vụ được gửi đến hàng đợi toàn cầu là an toàn luồng và giảm thiểu các tác dụng phụ. Các tác vụ được gửi để thực hiện theo thứ tự FIFO, nhưng thứ tự hoàn thành không được đảm bảo. Theo văn bản này, chỉ có ba hàng đợi đồng thời và bạn không thể tạo chúng, bạn chỉ có thể tìm nạp chúng với dispatch_get_global_queue
.
chỉnh sửa: bài đăng trên blog mở rộng trên câu trả lời này: http://amattn.com/p/grand_central_dispatch_gcd_summary_syntax_best_practices.html
Ya .. u đã chọn câu trả lời sai. Câu trả lời của Robert Ryan phù hợp hơn –