Я хотів би експериментувати з потоками на багатоядерному процесорі, наприклад, створити програму, яка використовує два різні потоки, які виконуються двома різними ядрами процесора.
Однак мені незрозуміло, на якому рівні нитки розподіляються між різними ядрами. Я можу уявити такі сценарії (залежно від реалізації операційної системи та мови програмування):
- Розподілом ниток керує операційна система. Нитки створюються за допомогою системних викликів ОС, і якщо процес відбувається на багатоядерному процесорі, ОС автоматично намагається виділити / запланувати різні потоки на різних ядрах.
- Розподіл ниток управляється реалізацією мови програмування. Виділення потоків до різних ядер вимагає спеціальних системних викликів, але бібліотеки стандартних потоків мови програмування автоматично справляються з цим, коли я використовую стандартну реалізацію потоку для цієї мови.
- Розподіл нитки повинен бути запрограмований чітко. У своїй програмі я повинен написати явний код, щоб виявити, скільки ядер доступно, і виділити різні потоки для різних ядер, використовуючи, наприклад, бібліотечні функції.
Щоб зробити питання більш конкретним, уявіть, що я написав свою багатопотокову програму на Java або C ++ для Windows або Linux. Чи буде мій додаток магічно бачити та використовувати декілька ядер під час роботи на багатоядерному процесорі (тому що всім керує або операційна система, або стандартна бібліотека потоків), чи потрібно змінювати код, щоб бути в курсі кількох ядер ?