Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Потоки и процессоры [D7, NT4, Win2k, WinXP]


Woolen ©   (2003-10-24 13:19:00) 

Хотелось бы узнать. Поток всегда работает на том процессоре, на который его изначально определила операционка или он может в процессе работы "перейти" на другой процессор?


Woolen   (2003-10-24 17:21:00) [1]

2 Rouse_
Спасибо.


Rouse_   (2003-10-24 16:50:00) [2]

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

Желаю успехов


Woolen   (2003-10-24 16:20:00) [3]


> и только в случае конфликтов между потоками (читай главу
> 7) использовать SetThreadIdealProcessor

Да, вспомнил, что еще хотел спросить. А конфликты между потоками - это что? Я привык к тем конфликтам, которые принято разруливать при помощи различных средств синхронизации и в нормальной программе их быть не должно. Какие конфликты подразумеваются здесь, и причем здесь процесоры (разве для потоков с конфликтами есть разница, какой процессор и сколько их)? Ну за исключением того, что чем больше процов, тем чаще происходят конфликты. Просто я не очень сдущ в этих вопросах.


Rouse_   (2003-10-24 16:15:00) [4]

В SetThreadAffinityMask указывается маска процессоров на которых может быть выполнен данный поток. Маска может включать как один процессор так и несколько.

Желаю успехов


Woolen   (2003-10-24 15:53:00) [5]

Ясно, спасибо. Тогда вопрос такой. Достаточно ли указания одного процессора в SetThreadAffinityMask для того, чтобы поток на нем запустился?


Игорь Шевченко   (2003-10-24 15:29:00) [6]


> Значит про "В процессе работы" там ничего не сказано но
> судя по всему, нельзя


Можно, но ни к чему. При переходе неизбежно должна быть очищена как кеш L2, так и TLB, операция эта не быстрая, так что нафига, спрашивается ?


Rouse_   (2003-10-24 14:09:00) [7]

Значит про "В процессе работы" там ничего не сказано но судя по всему, нельзя. Поток привязывается к определенному процессору до момента его пробуждения (не создания). Для назначения потоку процессора лучше использовать функцию SetThreadAffinityMask и только в случае конфликтов между потоками (читай главу 7) использовать SetThreadIdealProcessor.

Желаю успехов


Woolen   (2003-10-24 14:01:00) [8]


> не помню про "В процессе работы"

А я об этом и спрашиваю


Rouse_   (2003-10-24 13:51:00) [9]

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

Желаю успехов


Woolen   (2003-10-24 13:38:00) [10]


> Безусловно может, Рихтер об этом писал.

Именно в процессе работы потока он может перейти на другой процессор? Это действительно безусловно? То есть, какая-то работа выполняется на одном процессоре, потом ось сохраняет состояние регистров, восстанавливает его на другом процессоре и поток как ни в чем не бывало продолжает свою работу? Я правильно понял и ничего не напутал?


Woolen   (2003-10-24 13:34:00) [11]


> API - SetThreadIdealProcessor

Это я знаю, но ни слова там не сказано о том, можно это вызвать во время исполнения потока. Или идеальный процессор должен назначаться до того, как поток начал исполняться?


clickmaker   (2003-10-24 13:26:00) [12]

API - SetThreadIdealProcessor


Rouse_   (2003-10-24 13:26:00) [13]

Безусловно может, Рихтер об этом писал.

Желаю успехов


Наверх

Титульная страница Поиск, карта сайта Написать письмо