В планировщике GHC RTS, почему он должен помечать способность как свободную?

Когда я читал комментарий GHC Wiki к планировщику, меня смутил этот раздел:

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

Мой вопрос:
Для выделенного жирным предложения, что действительно приведет к "двойному переключению контекста", с пометкой или без пометки возможности как свободной. Более того, каковы два "переключения", если они произойдут - с who1 на who2, затем с who2 на who3?

9
задан sclv 18 May 2011 в 03:49
поделиться