- Sự khác biệt giữa Hàng đợi vận hành và Hàng đợi công văn là gì?
- Trong trường hợp nào sẽ phù hợp hơn với mỗi trường hợp?
Trả lời
NSOperationQueue
trước Grand Central Dispatch và trên iOS không sử dụng GCD để thực thi thao tác (điều này khác trên Mac OS X). Nó sử dụng các luồng nền thông thường có nhiều chi phí hơn một chút so với các hàng đợi GCD.
Mặt khác, NSOperationQueue
cung cấp cho bạn nhiều quyền kiểm soát hơn đối với cách hoạt động của bạn được thực hiện. Bạn có thể xác định các phụ thuộc giữa các hoạt động riêng lẻ, ví dụ, không thể thực hiện với các hàng đợi GCD đơn giản. Nó cũng có thể hủy bỏ các hoạt động đã được enqueued trong một NSOperationQueue
(theo như các hoạt động hỗ trợ nó). Khi bạn enqueue một khối trong một hàng đợi công văn GCD, nó chắc chắn sẽ được thực hiện tại một số điểm.
Để tổng hợp, NSOperationQueue
có thể phù hợp hơn cho các hoạt động dài hạn có thể cần phải bị hủy hoặc có các phụ thuộc phức tạp. Hàng đợi công văn GCD tốt hơn cho các tác vụ ngắn nên có hiệu năng tối thiểu và chi phí bộ nhớ.
EDIT: Có vẻ như tài liệu về NSOperationQueue
là lỗi thời và nó không sử dụng GCD trên iOS 4.0 và sau này.
[NSOperationQueue trên iOS 4.0 và sau đó được dựa trên GCD.] (Https: // devforums.apple.com/message/352780#352780) –
- thích GCD nơi nhiệm vụ không phải là nhiều phức tạp và hiệu suất CPU tối ưu là bắt buộc.
- Ưu tiên NSOperationQueue nơi nhiệm vụ phức tạp và yêu cầu hủy hoặc tạm dừng quản lý chặn và phụ thuộc.
GCD là một cách nhẹ để đại diện cho các đơn vị công việc sẽ được thực thi đồng thời. Bạn không lên lịch cho các đơn vị công việc này; hệ thống sẽ quản lý lịch biểu cho bạn. Thêm sự phụ thuộc giữa các khối có thể là một nhức đầu. Việc hủy hoặc tạm dừng một khối tạo thêm công việc cho bạn với tư cách là nhà phát triển!
NSOperation and NSOperationQueue bổ sung thêm một chút chi phí so với GCD, nhưng bạn có thể thêm phụ thuộc vào các hoạt động khác nhau. Bạn có thể sử dụng lại các hoạt động, hủy hoặc đình chỉ chúng. NSOperation tương thích với Quan sát giá trị khóa (KVO); ví dụ, bạn có thể bắt đầu NSOperation bằng cách nghe NSNotificationCenter.
NSOperation and NSOperationQueue là API đòn bẩy cao hơn, được tạo trên đầu trang của chính GDC, để đạt được sự đồng thời trong một cách hướng đối tượng.
- 1. Nhận hàng đợi công văn hiện tại?
- 2. Việc đình chỉ một hàng đợi công văn có đình chỉ hàng đợi đích không?
- 3. Tkinter: Đợi mặt hàng trong hàng đợi
- 4. Chủ đề và Hàng đợi
- 5. Hàng đợi công việc trong node.js
- 6. hàng đợi tin nhắn cho iOS/iPad - giống như MSMQ?
- 7. Hàng đợi công việc trong Clojure
- 8. C# Luồng và Hàng đợi
- 9. Hàng đợi thông thường so với hàng đợi SEDA
- 10. Resque: một công nhân cho mỗi hàng đợi
- 11. Tìm hàng chờ đợi, phân phối, công nhân cho erlang
- 12. Hàng đợi hiệu ứng trong Javascript
- 13. Hàng đợi chuỗi Android
- 14. Tôi nên sử dụng thuộc tính nào cho một Hàng đợi Công văn sau ARC?
- 15. std :: iteration hàng đợi
- 16. Sự khác nhau giữa Hàng đợi Thư Chết và Hàng đợi trả lại là gì?
- 17. Sự khác biệt giữa "hàng đợi toàn cầu" và "hàng đợi chính" trong GCD là gì?
- 18. cron script để hoạt động như một hàng đợi HOẶC một hàng đợi cho cron?
- 19. Hàng đợi riêng và công khai trên MSMQ
- 20. Cách sử dụng Hàng đợi công việc của Linux
- 21. Hàng đợi SMTP Net
- 22. Ngăn xếp và Hàng đợi, Tại sao?
- 23. Sự khác nhau giữa hàng đợi toàn cầu và hàng đợi của người dùng là gì?
- 24. Hàng đợi JMS đầy đủ
- 25. Sử dụng MongoDB làm hàng đợi thư cho Celery
- 26. Hàng công nhân và hàng đợi nhiều người thuê nhà với RabbitMQ
- 27. Tạo hàng đợi tải lên
- 28. Github: Hàng đợi xếp hàng và yêu cầu kéo
- 29. khách hàng cho hàng đợi JMS từ xa
- 30. Lớp loại Haskell cho Hàng đợi
câu hỏi tương tự http://stackoverflow.com/questions/4344884/nsoperation-vs-grand-central-dispatch – Joe