none
Работа SCHEDULERA потоков RRS feed

  • Вопрос

  • Добрый день,

    Интересует работа SCHEDULERA потоков, в интернете полно статей где написано что SCHEDULER управляет потоками примерно следующим образом. Из определённой очереди(Ready , Waiting,..) выбbраются потоки по приоритету и исполняются, через определённый интервал снова происходи тоже самое. Теперь вопрос как SCHEDULER  понимает что интервал истёк и нужно снова пройтись по очереди? А если нужно снова пройтись по очереди то получается что SCHEDULER после каждого истечения интервала для потока обязательно должен исполнить свой собственный поток для прохода по очереди как на картинке ?

    Я понимаю что это зависит от конкретной реализации но не смог найти документации.




    • Изменено Tuman_ 1 апреля 2017 г. 15:50
    1 апреля 2017 г. 15:29

Ответы

  • Обычно для этого используется аппаратный таймер и/или прерывание. А может и вообще ничего не использоваться, программа сама должна себя прерывать и передавать управление диспетчеру (как это было например в Windows до 95/NT).

    В любом случае "поток" это просто структура в памяти, никакого особенного смысла с точки зрения процессора она не несет.

    Процессор всегда что то выполняет (для упрощения считайте что в процессоре одно ядро), для примера код какого то "потока". Потом приходит прерывание от таймера. Код "потока" перестает выполняться, управление передается коду диспетчера. Который роется в списке "потоков", выбирает какой нибудь из них и передает ему управление. До следующего тика таймера (~20 ms).

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


    This posting is provided "AS IS" with no warranties, and confers no rights.

    • Помечено в качестве ответа Tuman_ 1 апреля 2017 г. 16:20
    1 апреля 2017 г. 16:15
    Модератор

Все ответы

  • Обычно для этого используется аппаратный таймер и/или прерывание. А может и вообще ничего не использоваться, программа сама должна себя прерывать и передавать управление диспетчеру (как это было например в Windows до 95/NT).

    В любом случае "поток" это просто структура в памяти, никакого особенного смысла с точки зрения процессора она не несет.

    Процессор всегда что то выполняет (для упрощения считайте что в процессоре одно ядро), для примера код какого то "потока". Потом приходит прерывание от таймера. Код "потока" перестает выполняться, управление передается коду диспетчера. Который роется в списке "потоков", выбирает какой нибудь из них и передает ему управление. До следующего тика таймера (~20 ms).

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


    This posting is provided "AS IS" with no warranties, and confers no rights.

    • Помечено в качестве ответа Tuman_ 1 апреля 2017 г. 16:20
    1 апреля 2017 г. 16:15
    Модератор
  • Спасибо большое  
    1 апреля 2017 г. 16:21