2015-02-21 3 views
0

Кража работы - это общая стратегия для Thread-Thread. Каждый процесс имеет рабочую очередь для выполнения работы и будет красть из очереди других, когда они не работают.Работа кражи и нить на уровне ядра

Есть ли ядро, которое реализует такую ​​стратегию для потока уровня ядра? Если нет, в чем причина?

Я верю, что в Linux существует понятие потоковой миграции в потоке уровня ядра, который переносит поток из процессора с высокой нагрузкой в ​​процессор с низкой нагрузкой, но это похоже на другой алгоритм. Но исправьте меня, если я ошибаюсь.

Благодаря

+0

Что ?? Процессорные ядра могут выполнять только один поток за раз. Ядро либо на 100% равномерно работает, либо оно не работает (пренебрегая обработкой прерываний). –

+1

@MartinJames: В чем вы суть? Я ничего не говорю о том, сколько потоков может выполнить ядро. – w00d

ответ

1

работы кражи планировщика является параллельными вычислениями планировщика. Это, как правило, от библиотек на уровне пользователя (например, Intel TBB: https://www.threadingbuildingblocks.org/) или даже языков, как Cilk (https://software.intel.com/en-us/intel-cilk-plus)

потоки на уровне ядра планируется операционной системой, а также с тем, что методы планирования весьма различны. Например, в планировщике расписания работы одна из целей - ограничить использование памяти (как доказано в оригинальной статье: http://supertech.csail.mit.edu/papers/steal.pdf) и добиться того, чтобы потоки сохранялись в deque. Однако в планировщиках операционной системы основная цель заключается в том, чтобы быть справедливым между пользователями, дать каждому процессу/ядру поток достаточного количества времени для запуска (поскольку состояния max-min справедливости: http://en.wikipedia.org/wiki/Max-min_fairness) и т. Д. Планировщики операционной системы даже используют разные приоритеты среди потоков/процессов ядра (см. http://en.wikipedia.org/wiki/Completely_Fair_Scheduler или http://en.wikipedia.org/wiki/Multilevel_feedback_queue). По этой причине реализации кражи работы выполняются на уровне пользователя, поскольку их целью является планирование потоков пользовательского уровня внутри процесса, а не потоков ядра.

+0

если я не понял, скажите, пожалуйста, чтобы отредактировать мой ответ :) – guilhermemtr