Làm thế nào để các ưu tiên hoạt động trên trình quản lý tác vụ và khi nào tôi không nên đặt cái này?


30

Tôi đã đặt ưu tiên cho một số quy trình để xem điều gì thực sự xảy ra, nhưng, hãy đoán xem ... Không có gì; tất cả đều chạy theo cùng một cách ...

Tôi thấy trên Google rằng các ưu tiên không thực sự liên quan đến tốc độ xử lý, điều đó có đúng không? Tại sao không? Nếu một quá trình có mức độ ưu tiên cao nhất, thì nó có nên đi nhanh hơn không ??


4
Câu trả lời ngắn gọn: When should I set [priorities in Task Manager]? Hầu như không bao giờ.
Dan Henderson

2
Một điều quan trọng khác để hiểu là việc thực thi các ưu tiên làm giảm tổng số lượng công việc mà hệ thống có thể làm. Đây là lý do tại sao các hệ điều hành máy tính để bàn phổ biến không phải là hệ điều hành thời gian thực. Và bạn càng khiến chúng hoạt động giống như các hệ điều hành thời gian thực, chúng càng kém hiệu quả. Gián đoạn, ví dụ, thổi ra bộ nhớ cache. Công việc ưu tiên thấp hơn vẫn phải hoàn thành và vẫn cạnh tranh cho I / O. Làm ít hiệu quả hơn, trong các phần nhỏ hơn, không mang lại lợi ích cho bất cứ ai.
David Schwartz

Đừng cố nghĩ cho máy tính của bạn. Bạn sẽ không chiến thắng. Nó biết làm thế nào để xử lý chủ đề của nó tốt hơn nhiều so với bạn.
b1nary.atr0phy

Câu trả lời:


51

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ụ.


1
Nhân tiện, câu trả lời của tôi cho câu hỏi liên quan sau đây có liên quan: superuser.com/questions/949030/ mẹo
Jamie Hanrahan

1
Cũng theo cách này: "Lập lịch", "lập lịch", v.v., ở đây đề cập đến các thường trình nhân Windows quyết định các luồng nào sẽ chạy và CPU nào chúng nên chạy. Không phải "lập lịch tác vụ", mà là về việc khởi chạy các quy trình tại thời điểm cụ thể hoặc để đáp ứng với các kích hoạt khác nhau.
Jamie Hanrahan

@JamieHanrahan ok Tôi đã chuyển nó ở đây: superuser.com/questions/1380473/
Khăn

5

Việc thay đổi các ưu tiên sẽ thay đổi cách hệ điều hành phân bổ thời gian CPU cho các ứng dụng đang chạy. Nó chỉ tạo ra các hiệu ứng đáng chú ý nếu mức sử dụng CPU tổng thể cao.

Ví dụ: bạn mã hóa video và xem một video khác nhau cùng một lúc. Có khả năng, ứng dụng mã hóa sẽ sử dụng 100% sức mạnh tính toán trên tất cả các lõi CPU của bạn. Kết quả là, các ứng dụng khác có thể nói lắp.

Windows theo mặc định sẽ ưu tiên "bình thường" như nhau cho cả hai ứng dụng. Tại thời điểm này, bạn có thể muốn nâng mức độ ưu tiên của phần mềm trình phát phim của mình. Bằng cách này, bạn sẽ có một video phát lại mượt mà với chi phí mã hóa video chậm hơn vì phần mềm mã hóa sẽ bị biến đổi thành một quá trình nền so với trình phát video.


"Có khả năng, ứng dụng mã hóa sẽ sử dụng 100% năng lượng tính toán trên tất cả các lõi CPU của bạn." Điều đó chỉ có thể nếu có ít nhất các luồng mã hóa số lõi .
Jamie Hanrahan
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.