Giả sử bạn có thẻ "đi đến đầu hàng" cho cửa hàng tạp hóa. Bạn đến cửa hàng, điền vào giỏ hàng của bạn, đến quầy thanh toán và thấy không có ai xếp hàng. Thẻ của bạn có giúp bạn được kiểm tra nhanh hơn không? Không.
Các ưu tiên không ảnh hưởng đến tốc độ xử lý, trong đó quy trình ưu tiên cao hơn sẽ không chạy nhanh hơn hoặc thậm chí sử dụng nhiều thời gian CPU hơn ... không phải nếu đó là điều duy nhất muốn sử dụng CPU.
Để thực sự nói về điều này, chúng ta cần đề cập đến chủ đề. Các quy trình không "chạy" trong Windows. Chủ đề, là một phần của các quy trình, là những gì chạy. (Mặc dù nếu một quá trình chỉ có một luồng, sự phân biệt khá mờ từ bên ngoài.)
(Nhân tiện: Thuật ngữ tiếp thị mà CPU có, ví dụ: "bốn lõi và tám luồng", gây hiểu nhầm. CPU có lõi, nhưng CPU không "có" luồng. Chủ đề là một phần của quy trình. Lõi CPU không kích hoạt siêu phân luồng có thể chạy một luồng, với siêu phân luồng được kích hoạt, lõi có thể chạy hai luồng. Nhưng CPU không "có" luồng.)
Mỗi luồng luôn ở một trong một số trạng thái lập lịch. Các trạng thái thường thấy nhất là: Chờ đợi (* nix gọi đây là "bị chặn"; trong cả hai hệ điều hành, điều này có nghĩa là chờ I / O hoặc tương tự, không sử dụng thời gian CPU và không muốn bất kỳ); Sẵn sàng (muốn sử dụng thời gian CPU nhưng không có sẵn CPU cho nó ngay bây giờ); và Chạy . Chỉ chạy các luồng tiêu thụ thời gian CPU; tức là nếu một tiến trình không có luồng chạy, nó sẽ được sử dụng để sử dụng 0% thời gian CPU trong các công cụ như Trình quản lý tác vụ.
Một luồng chỉ có thể chạy trên một lõi (hoặc, nếu siêu phân luồng được bật, "bộ xử lý logic") tại một thời điểm, do đó, một quá trình chỉ có thể sử dụng nhiều lõi CPU (hoặc LP) vì nó có các luồng muốn chạy vào lúc này . (Toàn bộ tuyên bố có thể được tạo ra từ toàn bộ hệ thống.)
Hầu hết các luồng trên hầu hết các hệ thống dành phần lớn thời gian của chúng ở trạng thái Chờ. (Đây là lý do tại sao quá trình nhàn rỗi của bạn sẽ chiếm hơn 95% thời gian CPU khi hệ thống của bạn không hoạt động.) Ngoại lệ sẽ là các luồng "làm việc" của những thứ như kết xuất video hoặc 3d, chơi game, v.v. thực sự có thể sử dụng 100% CPU, vì chúng thường phải làm việc trên một số dữ liệu đầu vào mà chúng phải đọc từ đâu đó và chúng thường tạo ra dữ liệu đầu ra phải được ghi ở đâu đó. Và họ có thể đề cập đến rất nhiều dữ liệu khác nhau trong bộ nhớ theo thời gian, điều đó có nghĩa là họ phải chờ các lỗi trang cứng được giải quyết.
Nhưng các luồng làm một cái gì đó như kết xuất video hoặc kết xuất hình ảnh 3D có thể dành hầu hết thời gian để "tính toán" trong CPU và rất ít chờ đợi I / O. Các luồng như vậy thường được gọi là "ràng buộc tính toán", có nghĩa là hiệu suất tổng thể của chúng chủ yếu bị giới hạn bởi tốc độ CPU.
Cài đặt bạn thực hiện trong Trình quản lý tác vụ thực sự thiết lập "mức ưu tiên cơ bản" cho tất cả các luồng trong quy trình. Mức độ ưu tiên thực tế hoặc "hiện tại" của luồng có thể cao hơn (nhưng không bao giờ thấp hơn mức cơ sở). Thêm vào đó trong một thời điểm. Các quyết định lập lịch ("ai sẽ chạy và dựa trên CPU nào") luôn được thực hiện bằng cách sử dụng mức ưu tiên hiện tại của luồng. Ưu tiên chỉ có ý nghĩa đối với các luồng Sẵn sàng và Chạy (hoặc nói theo cách khác, mức độ ưu tiên không có ý nghĩa đối với các chuỗi Chờ).
Windows sử dụng thuật toán lập lịch ưu tiên . Nếu chỉ có một luồng trong hệ thống muốn sử dụng thời gian của CPU, thì điều đó không thành vấn đề dù chỉ ưu tiên của nó là gì; nó được 100% CPU. Không phải là nếu bộ lập lịch "giữ lại" một phần khả năng của CPU khi một luồng có mức độ ưu tiên thấp đang chạy, chỉ trong trường hợp có thứ gì đó có mức độ ưu tiên cao hơn xuất hiện.
Nếu hai luồng muốn sử dụng CPU và chúng có cùng mức độ ưu tiên, thì chúng được lên lịch thông qua cái gọi là "cắt thời gian" và theo thời gian, mỗi luồng sẽ chiếm khoảng 50% thời gian của CPU. Trong khi đó, nếu chúng có mức độ ưu tiên khác nhau thì luồng ưu tiên cao hơn sẽ được 100% và mức thấp hơn sẽ không có gì .
. chiến thắng ", bởi vì nó được thực hiện bằng cách điều chỉnh mức độ ưu tiên của chuỗi bị bỏ đói.)
Nếu bạn có nhiều lõi CPU, mọi thứ trở nên thú vị hơn và các ưu tiên nói chung có ít hiệu quả hơn . Giả sử bạn có hai luồng muốn chạy. Và giả sử bạn có hai hoặc nhiều lõi CPU không làm gì khác có mức độ ưu tiên bằng hoặc cao hơn các luồng đó. Sau đó, hai luồng của bạn sẽ nhận được 100% lõi, bất kể ưu tiên tương ứng của chúng .
(Hai người xuất hiện ở siêu thị và có hai người kiểm tra miễn phí. Một trong những khách hàng có thẻ "đi đến đầu hàng". Không thành vấn đề.)
tl; dr phiên bản (cho đến nay): Ưu tiên không phải là "ai lấy tỷ lệ thời gian CPU", mà là "ai được chạy trước".
Tôi sẽ không quan tâm nhiều đến việc siêu phân luồng ở đây, ngoại trừ việc nói rằng Windows xử lý từng "bộ xử lý logic" trong một lõi giống như cách nó sẽ xử lý lõi nếu HT bị tắt. tức là chúng được coi là CPU "thực", với ngoại lệ này: Windows sẽ rất cố gắng để không sử dụng nhiều hơn một LP trong một lõi. tức là bạn thường không bắt đầu thấy cả hai LP trong lõi được sử dụng cho đến khi bạn có nhiều hơn số luồng lõi cố gắng chạy tất cả cùng một lúc. Điều này là do hai "bộ xử lý logic" không cung cấp cho bạn bất cứ thứ gì như hiệu năng gấp đôi của một lõi không siêu phân luồng.
Về "mức độ ưu tiên cơ bản": Windows sẽ điều chỉnh ("tăng" và "phân rã") mức độ ưu tiên hiện tại của các luồng dựa trên những gì chúng đã thực hiện gần đây. Các luồng mà các hoạt động I / O đã hoàn thành gần đây thường sẽ là một hoặc hai điểm trên cơ sở; Các luồng UI (các luồng đang chạy một cửa sổ) thường sẽ cao hơn đáng kể; Chủ đề liên kết với CPU thường sẽ ở cơ sở của họ. Mục đích của việc này là để duy trì khả năng phản hồi trong giao diện người dùng của chương trình và cũng để giữ cho các yêu cầu IO được truyền đến những thứ như đĩa.
Một chương trình (quy trình) cũng có thể thay đổi mức ưu tiên cơ bản của từng luồng của nó, trong phạm vi được xác định bởi mức độ ưu tiên của quy trình (điều bạn đặt trong Trình quản lý tác vụ). Nhưng phần lớn các chương trình không bận tâm. (Nhiều người trong số họ nên.)
Có những thứ khác đang diễn ra. Do tăng / giảm ưu tiên và vì các hệ thống đa xử lý (đa lõi hoặc siêu phân luồng hoặc cả hai) rất phổ biến hiện nay và vì luôn có những thứ chạy trong nền (nhưng chúng tôi hy vọng, không sử dụng nhiều thời gian CPU), và do ảnh hưởng của cả "ái lực" cứng và mềm, nên rất khó để chạy các trường hợp thử nghiệm và có được kết quả chính xác sẽ được dự đoán ở đây. Nhưng điều này sẽ cung cấp cho bạn gần với một hình ảnh chính xác.
Túm cái vạy lại là...
Đó là hợp lý để để lại hầu hết mọi thứ ở "Bình thường". Nếu bạn không, bạn có thể dễ dàng bỏ đói thứ gì đó mà bạn thực sự muốn làm việc (mặc dù bạn có thể không biết rằng nó tồn tại), như các chức năng xóa bộ đệm đĩa của hệ điều hành. Thật vậy, nhiều quy trình của HĐH sẽ khác với Bình thường và chúng nên được để lại bất cứ nơi nào Windows đặt chúng.
Một trường hợp hợp lý để sử dụng Trình quản lý tác vụ để giải quyết các ưu tiên là nếu bạn có một số tác vụ ngốn CPU (như kết xuất video hoặc 3D) và điều đó làm chậm việc sử dụng hệ thống của bạn trong khi nó đang chạy. Điều đúng đắn là, tin hay không, hạ thấp mức độ ưu tiên của nó xuống một hoặc hai. Nó sẽ vui vẻ sử dụng tất cả các chu kỳ CPU mà không có gì khác muốn nhưng sẽ tránh xa việc sử dụng hệ thống tương tác của bạn. Có thể mất một chút thời gian để hoàn thành công việc của mình, nhưng nó sẽ hoàn thành công việc với sự can thiệp tối thiểu đến việc sử dụng các chương trình khác tương tác của bạn. Nếu bạn không thích sự đánh đổi đó, đừng làm điều đó! Nhưng đặt nó ở mức ưu tiên cao trong nỗ lực "làm cho nó đi nhanh hơn" và nó có thể treo toàn bộ giao diện người dùng của bạn cho đến khi hoàn thành.
Không bao giờ đặt bất cứ thứ gì vào cái gọi là lớp ưu tiên Realtime.
(Chỉnh sửa - đoạn này được thêm vào) Ok, đó là một tuyên bố cực đoan. ("Không có yêu cầu phổ quát nào là đúng - không ngoại trừ điều này.") Ít nhất, không phải không có sự cân nhắc rất cẩn thận. Nếu mục tiêu của bạn là làm cho một cái gì đó chạy nhanh hơn, nó có thể sẽ không giúp đỡ. Nhưng nó có thể "khóa cứng" hệ thống của bạn (yêu cầu thiết lập lại hoặc trên hầu hết các máy hiện đại, yêu cầu chu kỳ nguồn). Hoặc làm cho nó không phản hồi đến mức nó cũng có thể bị khóa cứng.
nb: Bất kỳ ứng dụng trình phát video nào cũng nên chọn tham gia tính năng "Lập lịch lớp đa phương tiện" trong Vista trở lên. Điều này sẽ tự động cung cấp cho nó tới 80% CPU, được tính toán trong khoảng thời gian tương đối ngắn. Nếu bạn không thể phát lại miễn phí với điều đó thì có gì đó không ổn.
Để biết thêm chi tiết, hãy xem các chương về chủ đề và lên lịch trong Windows Internals Phiên bản thứ 6 của Solomon, Russinovich và Ionescu.
Xem thêm câu trả lời của tôi ở đây để biết thông tin về cách ưu tiên quy trình và luồng được đặt và ý nghĩa của cột "Ưu tiên" trong Trình quản lý tác vụ.
When should I set [priorities in Task Manager]?
Hầu như không bao giờ.