выполняется в отдельном потоке и проверяет значение расшареной переменной. Иногда загрузка цп достигает 50%. Я подозреваю, что именно из-за этого кода.
Почему так происходит и как этого можно избежать? Почему такие простые действия столько отъедают?
Константин Л. wrote:
> while(true) > { > if( SomeVolatileLongValue ) return 0; > } > выполняется в отдельном потоке и проверяет значение расшареной > переменной. Иногда загрузка цп достигает 50%. Я подозреваю, что именно > из-за этого кода.
Странно... должно быть 100%. Или у тебя 2-процессорная система?
> Почему так происходит и как этого можно избежать?
Использовать специальные системные объекты синхронизации mutex/semaphore.
Ну или на крайний случай хотя бы Sleep(100) вставить.
> Почему такие простые действия столько отъедают?
Потому что они исполняются очень-очень много раз.
Posted via RSDN NNTP Server 2.0
но это не зря, хотя, может быть, невзначай
гÅрмония мира не знает границ — сейчас мы будем пить чай
КЛ>выполняется в отдельном потоке и проверяет значение расшареной переменной. Иногда загрузка цп достигает 50%. Я подозреваю, что именно из-за этого кода. КЛ>Почему так происходит и как этого можно избежать? Почему такие простые действия столько отъедают?
Этот вопрос подробно рассматривается у Рихтера, как минимум в главах 8 и 9.
Здравствуйте, kan, Вы писали:
kan>Константин Л. wrote:
>> while(true) >> { >> if( SomeVolatileLongValue ) return 0; >> } >> выполняется в отдельном потоке и проверяет значение расшареной >> переменной. Иногда загрузка цп достигает 50%. Я подозреваю, что именно >> из-за этого кода. kan>Странно... должно быть 100%. Или у тебя 2-процессорная система?
hyper threading?
>> Почему так происходит и как этого можно избежать? kan>Использовать специальные системные объекты синхронизации mutex/semaphore. kan>Ну или на крайний случай хотя бы Sleep(100) вставить.
>> Почему такие простые действия столько отъедают? kan>Потому что они исполняются очень-очень много раз.
КЛ>выполняется в отдельном потоке и проверяет значение расшареной переменной. Иногда загрузка цп достигает 50%. Я подозреваю, что именно из-за этого кода. КЛ>Почему так происходит и как этого можно избежать? Почему такие простые действия столько отъедают?
Ничего удивительного.
На каком-нибудь Pocket PC ты таким наивным циклом батарею бы моментом разрядил.
На настольном PC просто грузишь процессор и наслаждаешься звуками кулера
Пользуйся объектами синхронизации.
Например event'ами.
Здравствуйте, Константин Л., Вы писали:
КЛ>Здравствуйте, kan, Вы писали:
kan>>Константин Л. wrote:
>>> while(true) >>> { >>> if( SomeVolatileLongValue ) return 0; >>> } >>> выполняется в отдельном потоке и проверяет значение расшареной >>> переменной. Иногда загрузка цп достигает 50%. Я подозреваю, что именно >>> из-за этого кода. kan>>Странно... должно быть 100%. Или у тебя 2-процессорная система?
КЛ>hyper threading?
Здравствуйте, Лазар Бешкенадзе, Вы писали:
B>>На каком-нибудь Pocket PC ты таким наивным циклом батарею бы моментом разрядил.
ЛБ>Во как! Циклом по батарее!
Ну дак...
Процессор будет загружен на 100%,
что непременно скажется на скорости разряда батареи
Здравствуйте, Аноним, Вы писали:
А>Здравствуйте, remark, Вы писали:
КЛ>>>hyper threading?
R>>На HT всё равно 100% должно есть
R>>
А>У меня HT (OS — WinXP Prof). А>Такие циклы отжирают 50%
Не должно. Всё же планировщик не дурак, отправит этот цикл на один виртуальный процессор. А второй в это время будет делом заниматься — то бишь, простаивать
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re: while(true)
От:
Аноним
Дата:
14.09.06 06:18
Оценка:
Здравствуйте, Константин Л., Вы писали:
КЛ>Есть код:
КЛ>
КЛ>выполняется в отдельном потоке и проверяет значение расшареной переменной. Иногда загрузка цп достигает 50%. Я подозреваю, что именно из-за этого кода. КЛ>Почему так происходит и как этого можно избежать? Почему такие простые действия столько отъедают?
Интересно бы было увидеть таблицу, содержащую информацию о сложности того или иного действия в вашем представлении. Например: