2009-10-17 29 views
14

Tôi có một ý tưởng vững chắc về cách thức hoạt động của GCD, nhưng tôi muốn biết thêm về nội dung "quản lý hệ điều hành" được chào hàng. Dường như hầu như mọi giải thích kỹ thuật về cách Grand Central Dispatch hoạt động với "Hệ điều hành" là hoàn toàn khác nhau. Tôi sẽ diễn giải một số phát hiện của tôi.Grand Central Dispatch thực sự sử dụng hệ điều hành như thế nào?

"Đó là một daemon toàn cầu đối với hệ điều hành phân phối nhiệm vụ qua nhiều số lõi".

Tôi không đủ ngu ngốc để tin điều đó.

"Hỗ trợ được xây dựng vào kernel để phải nhận thức của tất cả các ứng dụng GCD. GCD các ứng dụng làm việc phối hợp với các hạt nhân để đưa ra quyết định hợp lý về làm thế nào để quản lý đề trong ứng dụng ."

Âm thanh như lược đồ đồng bộ hóa này sẽ chậm hơn nhiều so với chỉ quản lý logic trong ứng dụng.

"GCD chỉ tồn tại trong ứng dụng và sử dụng hệ thống hiện tại tải dưới dạng số liệu về cách hoạt động."

Điều này nghe có vẻ thực tế hơn với tôi, nhưng tôi chỉ thấy một tuyên bố như thế này ở một nơi.

Điều gì thực sự xảy ra ở đây? Nó chỉ là một thư viện, hay nó là toàn bộ một "hệ thống"?

Trả lời

21

Đây là thư viện, nhưng có một số tối ưu hóa hạt nhân để cho phép kiểm soát mức hệ thống. Đặc biệt, điều xảy ra là có một giao diện bổ sung pthread_workqueue cho phép GCD nói với hạt nhân rằng nó muốn một luồng để chạy một số chức năng cụ thể, nhưng không thực sự bắt đầu một luồng (về cơ bản là một sự tiếp nối). Tại thời điểm đó hạt nhân có thể chọn để bắt đầu tiếp tục hoặc không phụ thuộc vào tải hệ thống.

Vì vậy, có, có một cơ sở hạ tầng toàn bộ hệ thống toàn cầu quản lý các chủ đề GCD trong hạt nhân và câu trả lời thứ hai là chính xác. Sai lầm bạn đang làm là nghĩ rằng có đồng bộ hóa đang diễn ra ở đó sẽ tốn một cái gì đó. Trình lập kế hoạch sẽ chạy bất kể cái gì, GCD đã làm gì được sử dụng giao diện mới cho phép trình lên lịch không chỉ quyết định có chạy các luồng dựa trên mức ưu tiên tương đối của chúng hay không, hoặc có tạo hay hủy các luồng tốt.

Đó là một tối ưu hóa (đáng kể), nhưng nó không thực sự cần thiết và cổng FreeBSD không thực sự có hỗ trợ cho toàn bộ hệ thống. Nếu bạn muốn xem các giao diện thực tế, đây là pthread_workqueue.h, việc thực hiện nằm trong số pthread.c của Apple, và bạn có thể thấy điểm vào sơ khai mà hạt nhân sử dụng để khởi động các giá trị làm việc trong sơ khai asm của chúng trong start_wqthread.s. Bạn cũng có thể đi thu thập thông tin thông qua xnu để xem làm thế nào nó upcalls vào cuống nếu bạn thực sự muốn.

+0

Cảm ơn bạn đã giải thích chi tiết! Sự nhầm lẫn của tôi tất cả bắt đầu khi tôi đọc về cổng FreeBSD và đã tự hỏi làm thế nào địa ngục OSX "OS" tính năng đã được chuyển (mặc dù BSD) như là một thư viện! Cảm ơn bạn lần nữa +1 –

Các vấn đề liên quan