Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Потоки и загрузка процессора

841
27 марта 2008 года
_nic
199 / / 29.07.2006
Прочитав эту http://izone.kiev.ua/articles/cpp/17/97.htm
статью ,решил попытатся попрактиковатся с потоками.Начал с самого простого кода который пришол в голову
Код:
#include <process.h>
#include <sysutils.hpp>
#include <stdio.h>
int glob,s;
void thr(void* pParams)
{
for(;;)
{
glob++;
Sleep(50);
if(glob==1000)
{
s=1;
break;
}
}
}
main()
{
_beginthread(thr,1024,NULL);
for(;;)
{
printf("%d\n",glob);
if(s==1)break;
}
}

Запускаю.Заглядываю в диспетчер задач.И у меня шок :eek: Сама по себе эта программа судя по диспетчеру дает нагрузку на камень от 3 до 10 % ,а вот csrss.exe 30-40 :eek: Обьясните пожалуйста чайнику в чем тут прикол :confused:
ЗЫ:камень атлон Х2 3600+ (разогнан до 2.5ГГц)
5.3K
29 марта 2008 года
Somebody
185 / / 24.12.2006
Csrss занимает процессорное время, потому что прога много выводит в консоль, а csrss занимается перерисовкой этого консольного окна; а у самой проги один поток выводит в консоль - это загружает csrss, а в другом потоке есть Sleep, поэтому он тоже мало загружает процессор.
841
29 марта 2008 года
_nic
199 / / 29.07.2006
Цитата: Somebody
Csrss занимает процессорное время, потому что прога много выводит в консоль, а csrss занимается перерисовкой этого консольного окна; а у самой проги один поток выводит в консоль - это загружает csrss, а в другом потоке есть Sleep, поэтому он тоже мало загружает процессор.



Чепуха ,если выполнить такой вот код

 
Код:
main()
{
int glob;
for(;;)
{
glob++;
Sleep(10);
printf("%d\n",glob);
}
}

то загрузка у csrss.exe 0 Причем здесь тогда перерисовка консоли? Дело в потоке :(
87
29 марта 2008 года
Kogrom
2.7K / / 02.02.2008
_nic, добавьте прямо перед
printf("%d\n",glob);
в первом варианте вашей программы команду
Sleep(50);

наверняка поймёте, что Somebody был прав.
5.3K
30 марта 2008 года
Somebody
185 / / 24.12.2006
Цитата: _nic
Чепуха ,если выполнить такой вот код
 
Код:
main()
{
int glob;
for(;;)
{
glob++;
Sleep(10);
printf("%d\n",glob);
}
}

то загрузка у csrss.exe 0 Причем здесь тогда перерисовка консоли? Дело в потоке :(


Нет, не чепуха. Чтобы csrss перерисовывал раз в 10, даже 10 с чем-то, миллисекунд - много процессорного времени не надо. А если убрать Sleep - это уже другое дело.

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог