Вы понимаете, это немного не так.'kernelthreads' в Linux - это в основном задачи ядра, которые запланированы вместе с другими процессами и потоками.Когда запускается планировщик ядра, алгоритм планирования решает, какой процесс / поток из пула выполняемых потоков планируется запустить следующим на данном ядре ЦП.Как упомянул @Basile Starynkevitch, вы можете указать ядру привязать отдельные потоки из вашего приложения к конкретному ядру, что означает, что планировщик операционной системы будет рассматривать возможность запуска только на этом ядре, наряду с другими потоками, которые не прикреплены к конкретному ядру.
В общем случае с многопоточностью вы не хотите, чтобы количество потоков было равно количеству ядер, если только вы не выполняете исключительно процессорную обработку, вам нужно количество потоков> количество ядер,При ожидании сетевого или дискового ввода-вывода (т. Е. Когда вы ожидаете в accept (2), recv (2) или read (2)) ваш поток не считается работоспособным.Если N потоков> N ядер, операционная система может запланировать выполнение другого потока во время ожидания этого ввода-вывода.