2009-03-18 37 views
13

Như tôi đã biết, bộ lập lịch chuỗi cửa sổ không phân biệt các chủ đề thuộc hai quy trình khác nhau, miễn là tất cả chúng đều có cùng mức độ ưu tiên cơ bản. Câu hỏi của tôi là nếu tôi có hai ứng dụng một với chỉ một sợi và một với 50 chủ đề nói rằng tất cả đều có cùng mức độ ưu tiên cơ sở, điều đó có nghĩa là quá trình thứ hai thích nhiều thời gian CPU hơn thì cái đầu tiên?Win32 Lập kế hoạch chủ đề

+0

Và nếu một ứng dụng có 50 quy trình và ứng dụng kia chỉ có một quy trình. Ứng dụng đầu tiên có được nhiều thời gian CPU hơn không? –

Trả lời

2

Điều đó tùy thuộc vào hành vi của chuỗi. Nói chung với sự khác biệt 50: 1 về số lượng chuỗi, có, ứng dụng có nhiều chuỗi hơn sẽ nhận được nhiều thời gian hơn. Tuy nhiên, các cửa sổ cũng sử dụng ưu tiên chuỗi động, có thể thay đổi điều này một chút. Năng động, chủ đề ưu tiên được mô tả ở đây:

http://support.microsoft.com/kb/109228

liên quan trích đoạn:

Ưu tiên cơ sở của một thread là cấp cơ sở mà từ đó những lần điều chỉnh tăng được thực hiện. Ưu tiên hiện tại của một chuỗi được gọi là ưu tiên động của nó. Các chủ đề tương tác có năng suất trước khi lát thời gian của họ tăng lên sẽ có xu hướng được điều chỉnh trở lên ưu tiên từ mức độ ưu tiên cơ bản của chúng. Các chủ đề ràng buộc tính toán không mang lại, tiêu thụ toàn bộ lát thời gian của chúng, sẽ có xu hướng giảm mức ưu tiên của chúng, nhưng không thấp hơn mức cơ sở. Sự sắp xếp này thường được gọi là lập lịch heuristic. Nó cung cấp hiệu năng tương tác tốt hơn và có xu hướng giảm tác động hệ thống của các luồng "CPU hog".

3

Đơn vị lập kế hoạch là một luồng, không phải là quy trình, vì vậy một quy trình với 50 luồng, tất cả trong một vòng lặp chặt chẽ sẽ nhận được nhiều CPU hơn một quy trình chỉ với một luồng chạy cùng mức độ ưu tiên. Điều này thường không phải là một mối quan tâm vì hầu hết các luồng trong hệ thống không ở trong trạng thái runnable và sẽ không được lập lịch biểu; họ đang chờ đợi vào I/O, chờ đợi cho đầu vào từ người sử dụng, và như vậy.

Windows Internals là một cuốn sách tuyệt vời để tìm hiểu thêm về trình lập lịch trình chuỗi Windows.

9

Lập lịch trong Windows ở mức độ chi tiết chủ đề chủ đề. Ý tưởng cơ bản đằng sau phương pháp này là các tiến trình không chạy nhưng chỉ cung cấp các tài nguyên và một bối cảnh trong đó các luồng của chúng chạy. Quay trở lại câu hỏi của bạn, bởi vì các quyết định lập kế hoạch được thực hiện nghiêm ngặt trên cơ sở chủ đề, không có xem xét nào được đưa ra cho quy trình mà luồng đó thuộc về. Trong ví dụ của bạn, nếu process A có 1 thread runnable và process B có 50 thread runnable, và tất cả 51 luồng có cùng mức độ ưu tiên, mỗi thread sẽ nhận được 1/51 thời gian CPU— Windows sẽ không cho 50% CPU xử lý A và 50% để xử lý B. Để hiểu các thuật toán lập lịch trình luồng, trước tiên bạn phải hiểu các mức ưu tiên mà Windows sử dụng. Bạn có thể refer tại đây để tham khảo nhanh.

Thử đọc Windows Internals để hiểu sâu.

+0

Thông tin cũng có tại đây: http://msdn.microsoft.com/en-us/library/ms810029.aspx#irql_sched_topic5 – Mehrdad

+0

Vì vậy, công bằng khi nói rằng Trình lập lịch trình chuỗi cửa sổ sử dụng thuật toán 'công bằng', ví dụ: tất cả các luồng có cùng mức độ ưu tiên đều có khả năng được lên lịch như nhau? Nếu vậy, đối với các chủ đề mức độ ưu tiên giống nhau, chuỗi nào được lên lịch trước? Thứ tự ngẫu nhiên hay là xác định theo một cách nào đó? – stt106

5

Tất cả những điều trên là chính xác nhưng nếu bạn lo lắng về quy trình 50 luồng hogging tất cả CPU, có những kỹ thuật bạn có thể làm để đảm bảo rằng không có quá trình đơn nào áp đảo CPU.

IMHO cách tốt nhất để thực hiện việc này là sử dụng job objects để quản lý việc sử dụng quy trình. Đầu tiên gọi CreateJobObject, sau đó SetInformationJobObject để giới hạn mức sử dụng CPU tối đa của các quy trình trong đối tượng công việc và AssignProcessToJobObject để gán quy trình với 50 chuỗi cho đối tượng công việc. Sau đó bạn có thể cho phép hệ điều hành đảm bảo rằng quá trình 50 thread không tiêu tốn quá nhiều thời gian CPU.

+0

Nếu có những công cụ cho người dùng cuối có thể sử dụng được, đó sẽ là một chiến thắng lớn cho Windows. –

+0

Có, sắp xếp. Bắt đầu trình quản lý tác vụ, nhấp chuột phải vào một quá trình và chọn "Đặt mối quan hệ". Điều này cho phép bạn gán các luồng riêng lẻ cho các CPU cụ thể. Nó không hoàn toàn giống nhau nhưng nó gần. –

0

Có cài đặt 'nâng cao' cục bộ có thể được sử dụng để lập kế hoạch bóng râm một chút có lợi cho ứng dụng bằng tiêu điểm. Với cài đặt 'dịch vụ', không có tùy chọn nào. Trong các phiên bản trước của Windows, cài đặt này thường hơi chi tiết hơn so với 'ứng dụng có tiêu điểm' (tùy chọn nhỏ đối với ứng dụng có tiêu điểm) và 'dịch vụ' (tất cả đều tương đương)

Do người dùng có thể đặt trên máy targe, có vẻ như nó đang yêu cầu sự đau buồn phụ thuộc vào thiết lập này ...

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