Tôi muốn thử nghiệm các luồng trên bộ xử lý đa lõi, ví dụ để tạo một chương trình sử dụng hai luồng khác nhau được thực thi bởi hai lõi bộ xử lý khác nhau.
Tuy nhiên, tôi không rõ các cấp độ được phân bổ cho các lõi khác nhau ở cấp độ nào. Tôi có thể tưởng tượng các tình huống sau (tùy thuộc vào hệ điều hành và triển khai ngôn ngữ lập trình):
- Phân bổ luồng được quản lý bởi hệ điều hành. Các luồng được tạo bằng các lệnh gọi hệ điều hành và, nếu quá trình xảy ra để chạy trên bộ xử lý đa lõi, HĐH sẽ tự động cố gắng phân bổ / lên lịch các luồng khác nhau trên các lõi khác nhau.
- Phân bổ luồng được quản lý bởi việc thực hiện ngôn ngữ lập trình. Phân bổ các luồng cho các lõi khác nhau đòi hỏi các cuộc gọi hệ thống đặc biệt, nhưng các thư viện luồng tiêu chuẩn của ngôn ngữ lập trình sẽ tự động xử lý việc này khi tôi sử dụng triển khai luồng tiêu chuẩn cho ngôn ngữ đó.
- Phân bổ chủ đề phải được lập trình rõ ràng. Trong chương trình của tôi, tôi phải viết mã rõ ràng để phát hiện có bao nhiêu lõi có sẵn và phân bổ các luồng khác nhau cho các lõi khác nhau bằng cách sử dụng, ví dụ, các hàm thư viện.
Để làm cho câu hỏi cụ thể hơn, hãy tưởng tượng tôi đã viết ứng dụng đa luồng của mình bằng Java hoặc C ++ trên Windows hoặc Linux. Ứng dụng của tôi sẽ thấy và sử dụng nhiều lõi một cách kỳ diệu khi chạy trên bộ xử lý đa lõi (bởi vì mọi thứ được quản lý bởi hệ điều hành hoặc thư viện luồng tiêu chuẩn), hoặc tôi phải sửa đổi mã của mình để nhận biết nhiều lõi ?