2012-11-15 33 views
11

Tôi đã tìm kiếm các bài đăng trước đó về chủ đề tương tự nhưng không thể tìm thấy câu trả lời hợp lệ do đó đặt câu hỏi này. Sự giúp đỡ của bạn trong việc trả lời nó được đánh giá cao.Làm thế nào để thiết lập mối quan hệ lõi cpu của chủ đề Java?

Tôi biết thiết lập mối quan hệ của quy trình với lõi CPU cụ thể bằng lệnh tác vụ trong Linux. Nhưng tôi muốn thiết lập mối quan hệ của một luồng Java với một lõi cpu cụ thể để các luồng khác thuộc cùng một tiến trình có thể chạy trên tất cả các lõi còn lại. Ví dụ, nếu tôi có một tiến trình có chứa 10 luồng với máy tính 4 lõi, tôi muốn dự trữ lõi-1 cho một luồng và để lại 9 luồng còn lại chạy trên 3 lõi còn lại. Nó có thể được thực hiện và làm thế nào?

Cảm ơn Sachin

Trả lời

8

Giả sử 2241 là pid của quá trình java của bạn. Chạy:

jstack 2241 

Danh sách này cung cấp cho bạn một danh sách các chủ đề. Tìm bạn ở đó và ghi chú trường nid. Nói nid = 0x8e9, chuyển đổi thành cơ sở 10 là 2281. Sau đó chạy:

taskset -p -c 0 2281 

Xong.

7

Thật không may, bạn không thể gán các chủ đề Java cho một lõi cụ thể. Tuy nhiên, những gì bạn có thể làm được đặt là Thread Priorities để ưu tiên các chuỗi (giả sử rằng điều này sẽ thực hiện tương tự)

Hoặc, bạn có thể sử dụng JNI, nhưng điều đó sẽ hoàn toàn quá mức.

+0

vâng ngược lại java sẽ không phải là phần cứng độc lập – Furtano

2

Hãy nhớ ứng dụng Java mà bạn đang chạy thực sự đang chạy trong một JVM mà lần lượt chạy trên hệ điều hành. Để bạn có thể tương tác trực tiếp với CPU, bạn cần một ngôn ngữ lập trình cấp thấp (ví dụ: C).

Như được đề xuất trong câu trả lời khác, bạn có thể sử dụng JNI để tương tác với ngôn ngữ cấp thấp hơn (như C) để thực hiện những gì bạn muốn, tuy nhiên bạn phải ủy quyền đồng thời (chuỗi được quản lý trong ngôn ngữ cấp thấp hơn) cho nó ...

0

Bạn có thể làm điều đó trong Java thuần bằng JNA. Không cần sử dụng bộ công việc. Chỉ cần nhớ rằng ái lực chủ đề là vô nghĩa trừ khi trước đó bạn đã phân lập lõi từ các luồng hạt nhân/người dùng và phần cứng ngắt. Tôi liên kết với Coral Blocks đã phát triển CoralThreads làm chính xác điều đó.

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