2012-04-28 14 views
7

Trong đồng thời Java, điều gì tạo ra một chuỗi "hoạt động"? Chỉ là sự thật là nó không chạy không? Là một "chờ đợi" hoặc "treo" thread vẫn được xem xét, kỹ thuật, hoạt động?Điều gì định nghĩa một chuỗi "hoạt động"?

+2

Ngữ cảnh có "hoạt động" xuất hiện ở đâu? Nó quá chung chung một thuật ngữ để cung cấp một định nghĩa cứng với rất ít thông tin. –

+0

"Nó thường được chấp nhận để có 4 - 20 chủ đề hoạt động cho mỗi lõi". – IAmYourFaja

+0

Chủ đề 'java' đang hoạt động là một chuỗi được * đủ điều kiện * làm luồng thực hiện đang chạy. Đó là một chủ đề đã để lại trạng thái "mới" và đã đạt được (hoặc tái đạt được) trạng thái "runnable". Chủ đề hoạt động chiếm chỗ ở trong nhóm chủ đề chạy được. Đó là một sai lầm phổ biến cho cụm từ nhạy cảm ngữ cảnh * hoạt động * được lấy làm "chuỗi chạy được hiện đang chạy". – 8bitjunkie

Trả lời

5

Từ những gì tôi có thể cho biết cụm từ 'hoạt động' dường như được sử dụng nhiều nhưng chưa bao giờ được xác định. Phương pháp ThreadGroup.enumerate() được ghi chép lại để:

Bản sao vào mảng nhất định mỗi chủ đề hoạt động trong nhóm này chủ đề và các phân nhóm của nó.

và từ looking at the source for this, đang kiểm tra phương pháp Thread.isAlive() và thêm phương thức này vào số đếm. Từ điều này tôi suy ra rằng các thuật ngữ 'hoạt động' và 'sống' được hoán đổi cho nhau và 'sống' được định nghĩa là:

Chủ đề vẫn còn sống nếu nó chưa được bắt đầu.

1

Trong ngữ cảnh này, tôi lấy "hoạt động" để có nghĩa là chúng đang thực thi mã. Chủ đề không hoạt động - các chủ đề bị chặn trên các cuộc gọi I/O hoặc đang chờ khóa - chỉ tiêu thụ tài nguyên bộ nhớ mà không ảnh hưởng đến CPU (hoặc chỉ ở mức tối thiểu).

Tuy nhiên, nó thực sự phụ thuộc vào chủ đề của bạn đang làm. Nếu mỗi luồng đang lặp qua các số để tính số nguyên tố, chúng hoàn toàn bị ràng buộc CPU và bạn thực sự chỉ có một lõi trên mỗi lõi để tối đa hóa thông lượng. Nếu họ đang thực hiện các yêu cầu HTTP hoặc thực hiện các tệp I/O, bạn có thể đủ khả năng để có một vài phần trên mỗi lõi.

Cuối cùng, một tuyên bố về chăn bao gồm tất cả các chủ đề nói chung mà không quan tâm đến những gì họ đang làm là khá vô giá trị.

Tôi đặc biệt khuyên bạn nên sử dụng sách Java Concurrency in Practice để xử lý chất lượng cao về chủ đề lập trình Java đồng thời.

0

Từ "hoạt động" đang được sử dụng theo nghĩa tiếng Anh thông thường tại đây.

Ý nghĩa tiếng Anh thông thường của từ đang hoạt động là "làm điều gì đó". Vì vậy, một ý nghĩa trực quan của "hoạt động" cho chủ đề là họ đang thực sự thực hiện hoặc đã sẵn sàng để thực hiện.

Trong bối cảnh của câu nói này:

"Nó nói chung là chấp nhận được để có 4-20 đề tích cực cho mỗi lõi"

từ "tích cực" được sử dụng một cách nhất quán với điều này , mặc dù tôi muốn giải thích các con số. (20 là khá cao, IMO).

Tuy nhiên, tôi cho rằng đây là một tuyên bố cố ý mơ hồ. Cung cấp cho aways là việc sử dụng cụm từ chồn "nó thường được chấp nhận" (chứ không phải trích dẫn bất kỳ nguồn cụ thể) và phạm vi rộng ("4 - 20"). Vì vậy, bạn có thể làm cho trường hợp từ "hoạt động" là một ví dụ khác về sự mơ hồ có chủ định.

IMO, tác giả của báo giá đang cố gắng làm cho điểm chung rằng "quá nhiều chủ đề là xấu" ... mà không được chính xác về những gì "quá nhiều". Việc trích xuất hướng dẫn chính xác hơn bằng cách buộc lại những gì anh ta nói có nghĩa là "hoạt động" là vô nghĩa.(Và để được rõ ràng, nó là không thể để biết có bao nhiêu "quá nhiều" là ... nói chung.)

1

Hãy xem java.lang.Thread.State

Trong khác không Các hệ thống Java, hoạt động tương đương với "RUNNABLE". Một Task/Process/Thread đang hoạt động nếu nó có thể chủ động chạy mã. Nó bị đình chỉ nếu nó không phải là (ngăn chặn, vv)

Như Stephen C cho biết, hoạt động đang được sử dụng nhiều hơn như tiếng Anh chứ không phải Java ở đây.

0

"Thường có thể chấp nhận có từ 4 đến 20 chủ đề hoạt động trên mỗi lõi". - Adam Tannon

Theo nghĩa này, tôi nghĩ từ này có nghĩa là "sẵn sàng chạy" thay vì "còn sống" hoặc bất kỳ nghĩa nào khác có thể. Nó có ý nghĩa để không có nhiều hơn một số ít các chủ đề trên hàng đợi sẵn sàng, bởi vì bạn không nhận được bất kỳ giá trị cho các chủ đề chờ đợi, và bạn đóng góp để lập kế hoạch và bối cảnh trên không chuyển đổi. Mặt khác, nếu bạn có ít chuỗi sẵn sàng chạy hơn lõi, bạn không sử dụng tài nguyên có sẵn.

+0

http://stackoverflow.com/questions/3275210/what-is-the-thread-state-of-a-thread-after-thread-yield – andersoj

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