![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Потоки и процессоры [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]
Безусловно может, Рихтер об этом писал.
Желаю успехов