Saya ingin bereksperimen dengan utas pada prosesor multi-inti, misalnya untuk membuat program yang menggunakan dua utas berbeda yang dijalankan oleh dua inti prosesor yang berbeda.
Namun, tidak jelas bagi saya di tingkat mana benang dialokasikan ke inti yang berbeda. Saya bisa membayangkan skenario berikut (tergantung pada sistem operasi dan implementasi bahasa pemrograman):
- Alokasi utas dikelola oleh sistem operasi. Utas dibuat menggunakan panggilan sistem OS dan, jika proses tersebut berjalan pada prosesor multi-inti, OS secara otomatis mencoba mengalokasikan / menjadwalkan utas yang berbeda pada inti yang berbeda.
- Alokasi utas dikelola oleh implementasi bahasa pemrograman. Mengalokasikan utas ke inti yang berbeda membutuhkan pemanggilan sistem khusus, tetapi pustaka utas standar bahasa pemrograman secara otomatis menangani ini ketika saya menggunakan implementasi utas standar untuk bahasa itu.
- Alokasi utas harus diprogram secara eksplisit. Dalam program saya, saya harus menulis kode eksplisit untuk mendeteksi berapa banyak core yang tersedia dan untuk mengalokasikan utas yang berbeda untuk inti yang berbeda menggunakan, misalnya, fungsi perpustakaan.
Untuk membuat pertanyaan lebih spesifik, bayangkan saya telah menulis aplikasi multi-threaded saya di Java atau C ++ di Windows atau Linux. Apakah aplikasi saya secara ajaib melihat dan menggunakan banyak core ketika dijalankan pada prosesor multi-core (karena semuanya dikelola baik oleh sistem operasi atau oleh pustaka thread standar), atau apakah saya harus memodifikasi kode saya untuk mengetahui beberapa core ?