Я не могу сказать, что я эксперт по топи c - нет, - но пока никто, похоже, не хочет отвечать, поэтому я сделаю это наилучшим образом.
Это было бы разумно предположить, что в системе NUMA было бы полезно продолжать работу потока на одном и том же ядре как можно дольше. По сути, это будет означать слабую форму привязки процессора , когда планировщик решает, какое ядро следует запустить потоку, и может динамически изменять его.
Основа c планирование с привязкой процессора достаточно просто реализовать: вы просто берете существующий алгоритм планирования и модифицируете его таким образом, чтобы каждое ядро имело свою собственную очередь потоков (или очереди). В системе NUMA все остальное зависит от того, когда выгодно перенести поток на другое ядро; Я не думаю, что можно дать общеприменимый алгоритм для этого, потому что выгоды и затраты сильно зависят от специфики рассматриваемой системы.
Обратите внимание, что тип процессора связан с планировщиком потребность в слабом и automati c: к какому ядру прикреплен поток, полностью зависит от планировщика и может изменяться всякий раз, когда планировщик считает это полезным. Это резко контрастирует со сродством процессора, например, в планировщике Linux, где сродство процессора равно hard (поток не может быть запущен на ядре, которого у него нет сходство с) и вручную , управляемым пользователем (см. sched_setaffinity и pthread_setaffinity_np ).