2012-02-08 5 views
18

Tôi đang đọc tài liệu trên hàng đợi gửi cho GCD, và trong đó họ nói rằng hàng đợi là FIFO, vì vậy tôi đang làm ảnh hưởng đến hiệu ứng này trên các công văn không đồng bộ/đồng bộ hóa?Grand Central Dispatch async vs sync

từ tôi hiểu async thực hiện điều theo thứ tự mà nó được điều khi đồng bộ thực thi mọi thứ nối tiếp ..

nhưng khi bạn viết mã GCD của bạn, bạn quyết định thứ tự mà sự việc xảy ra .. do đó, miễn là bạn biết những gì đang diễn ra trong mã của bạn, bạn nên biết thứ tự mà mọi thứ thực thi ..

câu hỏi của tôi là, ở đâu có lợi ích của async ở đây? Tôi có thiếu một cái gì đó trong sự hiểu biết của tôi về hai điều này.

Trả lời

12

đồng bộ nghĩa là chức năng S BL KHÓA luồng hiện tại cho đến khi nó hoàn thành, async nghĩa là nó sẽ được xử lý trong nền và chức năng S NOT KHÔNG CHẶN chuỗi hiện tại.

Nếu bạn muốn thực hiện nối tiếp các khối, hãy kiểm tra việc tạo hàng đợi công văn nối tiếp

+0

ah yea mà xóa nó lên nhờ mát cho điều đó. Có, tôi đang sử dụng hàng đợi nối tiếp ngay bây giờ .. Tôi chỉ không chắc chắn về lợi ích hiện tại của tôi. cảm ơn. –

24

Câu trả lời đầu tiên không hoàn toàn là hoàn toàn. Có, đồng bộ hóa sẽ chặn và không đồng bộ sẽ không, tuy nhiên có thêm ngữ nghĩa để tính đến. Việc gọi dispatch_sync() cũng sẽ làm cho mã của bạn phải đợi cho đến khi mỗi và mọi mục đang chờ xử lý trên hàng đợi đó đã hoàn thành việc thực hiện, đồng thời làm cho nó trở thành một điểm đồng bộ hóa cho công việc đã nói. dispatch_async() sẽ chỉ gửi công việc tới hàng đợi và trả về ngay lập tức, sau đó nó sẽ được thực hiện "tại một số điểm" và bạn cần theo dõi hoàn thành công việc đó theo cách khác (thường bằng cách lồng một dispatch_async vào một dispatch_async khác - xem trang người đàn ông chẳng hạn).

+0

cảm ơn câu trả lời của bạn. làm cho nó có ý nghĩa hơn bây giờ. –

6

Từ trang người đàn ông:

YẾU TỐ CƠ BẢN

Conceptually, dispatch_sync() is a convenient wrapper around 
dispatch_async() with the addition of a semaphore to wait for completion 
of the block, and a wrapper around the block to signal its completion. 
See dispatch_semaphore_create(3) for more information about dispatch sem- 
aphores. The actual implementation of the dispatch_sync() function may be 
optimized and differ from the above description. 
1

Công việc có thể được thực hiện đồng bộ hoặc không đồng bộ.

Chức năng đồng bộ trả về điều khiển trên hàng đợi hiện tại chỉ sau khi tác vụ kết thúc. Nó chặn hàng đợi và chờ cho đến khi nhiệm vụ kết thúc.

Không đồng bộ hàm trả về điều khiển trên hàng đợi hiện tại ngay sau khi tác vụ được gửi đến được thực hiện trên hàng đợi khác. Nó không đợi cho đến khi nhiệm vụ kết thúc. Nó không chặn hàng đợi.

Chỉ trong Asynchronous chúng ta có thể thêm chậm trễ ->asyncAfter(deadline: 10..