Понятия Pthread - PullRequest
       4

Понятия Pthread

0 голосов
/ 22 марта 2012

Я изучаю темы и не уверен, что понимаю некоторые понятия. В чем разница между выкупом и доходностью? До сих пор я знаю, что вытеснение является вынужденным выходом, но я не уверен, что это на самом деле означает. Спасибо за вашу помощь.

Ответы [ 4 ]

1 голос
/ 22 марта 2012

Выход : поток вызывает функцию в планировщике, которая потенциально «паркует» этот поток и запускает другой.Другой поток - тот, который раньше называл yield, а теперь, похоже, возвращается из него.Многие функции могут иметь выходную семантику, например, чтение с устройства.

Preempt : в систему поступает внешнее событие: какое-то прерывание (часы, поступление сетевых данных, дисковый ввод-вывод).О завершение ...).Какой-либо поток, работающий в это время, приостанавливается, и на компьютере работает операционная система, кодирующая контекст прерывания.Когда прерывание обслуживается и пора возвращаться из прерывания, может быть принято решение о планировании, чтобы оставить прерванный поток запаркованным и вместо этого возобновить другой.Это упреждение.Если / когда этот исходный поток снова запустится, будет активирован контекст, который был сохранен прерыванием, и он будет точно выбран там, где остановился.

Системы планирования, которые полагаются исключительно на yield, называются «кооперативными»."или" кооперативная многозадачность ", а не" упреждающий ".

Традиционный (читай: старый, 1970-х и 80-х) Unix является многозадачным в ядре с вытесняющим пользовательским пространством.Процедурам ядра доверяют, чтобы дать в разумные сроки, и поэтому при запуске кода ядра вытеснение отключено.Это значительно упрощает кодирование ядра и повышает надежность за счет производительности, особенно при использовании нескольких процессоров.Linux был таким много лет.

1 голос
/ 22 марта 2012
1 голос
/ 22 марта 2012

Разница в том, как вводится ОС.

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

Точное поведение yield () в некоторой степени зависит от аппаратного обеспечения / ОС / языка. Если вы не разрабатываете низкоуровневые механизмы блокировки потоков без блокировок, и вы не очень хороши в этом, лучше просто забыть о yield ().

Вытеснение - это акт прерывания одного потока и распределения другого на его месте. Это может произойти только после аппаратного прерывания. Когда аппаратное обеспечение прерывается, вводится его драйвер. Драйвер может решить, что он может с пользой подготовить поток (например, поток заблокирован при вызове read () к драйверу, и драйвер накопил хороший, большой буфер данных). Драйвер может сделать это, сигнализируя семафор и выходя через. ОС (которая обеспечивает точку входа именно для такой цели). Этот путь выхода драйвера вызывает перепланирование и, возможно, заставляет поток чтения работать вместо какого-либо другого потока, который работал до прерывания - другой поток был прерван. По сути, упреждение происходит, когда ОС решает прервать-вернуться к другому набору потоков, отличному от того, который был прерван.

1 голос
/ 22 марта 2012

Выгода - это когда один поток останавливает работу другого потока, чтобы он мог работать.

Выход - это когда поток добровольно отдает процессорное время.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...