2013-09-17 4 views
5

Я читал о типе System.Threading.DispatcherObject по этой ссылке http://msdn.microsoft.com/en-us/library/ms750441.aspxлогическая нить против физической нити

В статье упоминается о один к одному отношениям между логической и физической нитью. Вот отрывок из статьи:

В стадии проектирования WPF, цель состояла в том, чтобы перейти к одной потока исполнения, а «сродство» модель без резьбы. Тема сродство происходит, когда компонент использует идентификатор исполняющего потока для хранения некоторого типа состояния. Наиболее распространенной формой этого является использовать локальное хранилище потоков (TLS) для хранения состояния. сродства Thread требует, чтобы каждый логический поток выполнения будет принадлежать только один физического потоку в операционной системе, которая может стать памятью интенсивной

Может кто-то пожалуйста. объясните, в чем разница между логическим и физическим потоком?

+0

Следующее предложение - это то, что действительно имеет значение. Они просто сделали так, как работает любая библиотека классов GUI в Windows. Brevity никогда не был активом архитектора WPF. –

ответ

3

Местный поток является потоком во время выполнения. Эта нить более легкая, чем полноценная физическая нить, и хороша для процессов с более легким весом. Физический поток - это поток, который переключает и обрабатывает контекст процессора. Он имеет больше метаданных, связанных с ним, поскольку операционная система отслеживает это. Существует гораздо больше деталей, но это краткий обзор.

Физический поток в этом случае будет содержать эти логические «виртуальные потоки» внутри.

1

CLR .NET 2.0 планировал иметь fiber support as .NET Тема для SQL CLR. Он никогда не попадал в продукт, но может быть, что в отдаленном будущем CLR поддержит его. Следовательно, это большое предупреждение о близости красной нити.

Волоконно-оптические волокна OS does support, но они довольно сложны в использовании, так как вы переключаете свой стек в пользовательский режим, чтобы другой код работал на одной и той же физической нити. Это устраняет дорогостоящие переключатели контекста, которые могут иметь смысл в некоторых сценариях с высокой производительностью. Использование волокон в качестве абстракций вряд ли является хорошей идеей, поскольку вы не можете позвонить в какую-либо стороннюю библиотеку, так как вы не знаете, действительно ли api предполагает сходство нитей или нет.

Стоимость коммутаторов контекста в современных многоядерных машинах намного меньше, чем раньше было несколько версий Windows и поколений процессоров. Я сомневаюсь, что вы приобретете много волокон в реальном мире. Кроме того, производители микросхем прилагают все усилия, чтобы еще меньше снизить стоимость контекстных переключателей. Есть designs discussed, чтобы сделать его таким же дешевым, как один цикл процессора.

Чтобы сделать длинную историю короткой:

Может случиться так, что объект CLR Нить не физический поток операционной системы, если вы у себя CLR самостоятельно и использовать (еще) не существующую особенность хостинга CLR API-интерфейсы.

Насколько я знаю, система насосов для сообщений Window останется там даже в Windows 8, где каждое окно имеет сходство резьбы с создающей нитью, которая также должна передавать сообщения окна.

Смежные вопросы