Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: загрузка процессора при многопоточности  (Прочитано 24556 раз)
0 Пользователей и 7 Гостей смотрят эту тему.
marat_
Шеф-повар
Опытный

ru
Offline Offline

« : 27-03-2008 11:51 » 

привет всем. первый раз с такой проблемой столкнулся: при запуске нескольких потоков в менеджере процессов показывает загрузку в 99% на приложение. понизил приоритет потоков. все остальные программы запускаются прекрасно, машина не висит, а в менеджере те же 99%. начальство пугается. просит уменьшить влияние моей программы на работоспособность казённого оборудования. говорят это не укладывается в рамки амортизации. а я не могу! что делать?

З.Ы. а может хук поставить? при появлении диспетчера отлавливать хендл строки и тулить туда свои проценты? 0.000000001%, например...
« Последнее редактирование: 27-03-2008 11:53 от marat_ » Записан
Вад
Модератор

ru
Offline Offline
Пол: Мужской

« Ответ #1 : 27-03-2008 11:58 » 

marat_, так у тебя приложение реально настолько затратно, что использует 99% ЦП? Понижение приоритетов тогда ничего не даст: просто перестанешь отнимать время у других процессов, а всё свободное время будет по-прежнему тратиться на твой процесс.

Если требование по загрузке ЦП стоит жёстко, но хочешь-не хочешь, а оптимизацией заняться придётся Улыбаюсь Вообще, расскажи, чем вызвана 99% загрузка и почему невозможно сделать меньше. Вдруг, возможно Улыбаюсь
Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #2 : 27-03-2008 12:14 » 

marat_, нужно для начала определить место в программе, которое приводит к 99% ) Если с ходу не хзнаешь, где, Ставь заглушки на процедуры, где подозреваешь. А потом - код процедуры в студию на анализ  ))
Записан

Ochkarik
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #3 : 27-03-2008 13:11 » 

marat_, я б, тоже, знаете-ли, испугался бы....
"хорошшая" программа, она код ДНК расшифровывает?)
Записан

RTFM уже хоть раз наконец!  RTFM :[ ну или хотя бы STFW...
marat_
Шеф-повар
Опытный

ru
Offline Offline

« Ответ #4 : 28-03-2008 01:51 » 

все процедуры проверены до невозможности. сами процедуры потоков: обычный бесконечный цикл обработки данных. если данные есть - работает. нет - спит. за этим следит поток обеспечения, который работает по событиям добавления данных, окончания обработки данных. но данных бывает много. и тогда поток, с ними работающий, последовательно обрабатывает поступающие элементы. всё просто.
не впервый раз, мягко говоря, реализую подобную схему. всё было прекрасно. до вчерашнего дня...
Записан
Антон (LogRus)
Глобальный модератор

ru
Offline Offline
Пол: Мужской
Внимание! Люблю сахар в кубиках!


WWW
« Ответ #5 : 28-03-2008 04:09 » 

Возьми Process Explorer и глянь какой именно поток, жрёт ресурсы.
Нет ли у тебя цикла ожидания событий?
Например, если ты в цикле без sleep будешь сканировать каталог на предмет наличия файлов, то запросто можешь сожрать все ресурсы процессора(были случаи Улыбаюсь )
Т.е. рекомендую проверить, нагрузку на процессор при отсутсвии потока входных данных.

Хотя фиг знает, что ты там считаешь, может действительно код ДНК расшифровываешь. Улыбаюсь
Записан

Странно всё это....
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #6 : 28-03-2008 04:12 » new

вот покажи код потока, который никогда не "спит" Улыбаюсь То есть в котором нет реально Sleep и его никто не suspend
Записан

Антон (LogRus)
Глобальный модератор

ru
Offline Offline
Пол: Мужской
Внимание! Люблю сахар в кубиках!


WWW
« Ответ #7 : 28-03-2008 04:17 » 

LogRus, лично у меня нет таких примеров Улыбаюсь
Хотя один раз натыкался, когда поток в цикле бегал по папке и искал новые файлы, вот он реально все ресурсы проца съедал, хотя там кода на полторы строки, поставили sleep(100); проблема исчезла.
Записан

Странно всё это....
Ochkarik
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #8 : 28-03-2008 08:10 » 

LogRus, так тоже... чего бегать то? по папке... функция есть!(запямятовал... но точно была...)Ага
Записан

RTFM уже хоть раз наконец!  RTFM :[ ну или хотя бы STFW...
sss
Специалист

ru
Offline Offline

« Ответ #9 : 28-03-2008 08:26 » 

FindFirstChangeNotification
Записан

while (8==8)
Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #10 : 28-03-2008 10:00 » 

LogRus, ты уже сам себе отвечаешь? Ага

marat_, проверка кода в большом проекте тебе может мало чего дать, кроме большой потери времени.

Специально для твоей проблемы есть куча спец. софта, который позволяет выявить именно такие места.

Я последний раз пользовался AQTime.

Посмотри в гугле: performance tools C++
Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
Scorp__)
Молодой специалист

ru
Offline Offline
Пол: Мужской

« Ответ #11 : 28-03-2008 11:43 » 

marat_, 99% загрузки (или 50% на Pentium с HT) это почти наверняка бесконечный цикл, который работает все время. Можно даже профилировщиками не пользоваться, а просто брейкпойнты понаставить и посмотреть, что в отсутствие данных происходит. В последний раз у меня такая штука была, когда неверный код возврата был из процедуры отрисовки Улыбаюсь
Записан

- А Вы сами-то верите в привидения?
- Конечно, нет, - ответил лектор и медленно растаял в воздухе.
marat_
Шеф-повар
Опытный

ru
Offline Offline

« Ответ #12 : 28-03-2008 11:50 » 

ога, спасибо, Джон, гляну. а слипы я уже выставил, но, по-моему, это пошло. а ресурсы так же жрутся. причём показывается, что всеми потоками. в общем начальство успокоилось, а у меня беспокойство осталось. проект действительно не маленький, сказывается неопытность кодинга в этой отрасли. но по такому же принципу я организовывал кодирование/декодирование JPEG. файлы до 50 метров создавал. всё было гут. а тут ерундовый анализ, копирование данных и такая заморочка. спасибо всем большое за участие.

Scorp, бесконечный цикл приёма сообщений мне просто жизненно необходим...
Записан
Вад
Модератор

ru
Offline Offline
Пол: Мужской

« Ответ #13 : 28-03-2008 11:55 » 

все процедуры проверены до невозможности. сами процедуры потоков: обычный бесконечный цикл обработки данных. если данные есть - работает. нет - спит.
Вот у меня тоже ощущение, что не всё чисто с режимом "сна"... Если данных только бывает много, а не всё время много - то постоянная загрузка до 100% - это точно ненормально. Вот если в момент обработки - ещё возможно.

бесконечный цикл приёма сообщений мне просто жизненно необходим...
Может, есть способ сделать его таким образом, чтобы ожидающий поток спал в ожидании входных событий? Или определить допустимые интервалы между опросами источника данных и реализовать опрос с помощью таймера?
Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #14 : 28-03-2008 12:00 » 

marat_, в моём проекте тоже имеется бесконечный цикл приёма сообщений (с компорта). Это делает отдельный поток , события я не использую , результат - в спокухе 9% (кроме чтения из порта ещё много всякой всячины считается по таймеру каждые пол-секунды). А когда с порта со всей дури прёт инфа, получается в среднем 20%
Записан

Scorp__)
Молодой специалист

ru
Offline Offline
Пол: Мужской

« Ответ #15 : 28-03-2008 12:01 » 

marat_, попробуй синхронизацию сделать событиями. На входе в поток ждешь события его завершения или поступления данных. Как он данные обработал - опять ждет на WaitForMultipleObjects. Оформляется это также в виде бесконечного цикла.
Записан

- А Вы сами-то верите в привидения?
- Конечно, нет, - ответил лектор и медленно растаял в воздухе.
marat_
Шеф-повар
Опытный

ru
Offline Offline

« Ответ #16 : 28-03-2008 13:06 » 

так прочтите же моё второе сообщение!!! я об этом и писал!!! всё на событиях. потоки спят, вроде бы... но активности точно не проявляют, потом, если мессага приходит, работают. всё просто как по таракану тапком! я хоть и новичок, но не ламер.
поэтому у меня и вопрос возник...
Записан
Вахмурка
Помогающий

ru
Offline Offline
Пол: Мужской
Программист


WWW
« Ответ #17 : 28-03-2008 13:23 » 

marat_, ну если уверен что дело не в потоках, значит дело в источнике событий. Сообщение о событии ведь посылает тоже какой-то поток. Как он его генерирует?  А сообщение случайно не SMS?
« Последнее редактирование: 28-03-2008 13:33 от Вахмурка » Записан

Программа – это мысли спрессованные в код.
marat_
Шеф-повар
Опытный

ru
Offline Offline

« Ответ #18 : 28-03-2008 15:00 » 

нет, блин, пожарная тревога!
...
мне действительно интересно, а если в системе баг?

« Последнее редактирование: 28-03-2008 15:55 от Джон » Записан
Ochkarik
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #19 : 28-03-2008 15:12 » 

потоки то как синхронизируются? на каждый запрос безусловное выставление события? или только по факту - необработанные данные есть/нет?
потому как при большом потоке Event-тов... короче ядру совсем не сладко будет.
в панели управления-администрирование-производительность можно число контекстных переключений посмотреть. для конкретно твоих потоков. и еще много чего...

впрочем, советы дело такое;)

PS у нас на MFC такая же реакция)
 сам в визуализацию не лезу... а наши либо для скорости на чистом API, но это крайне некрасиво выходит. либо дельфи с билдером... а наши линуксоиды на QT подсели) хотя это отдельное мировозрение)))
« Последнее редактирование: 28-03-2008 15:14 от Ochkarik » Записан

RTFM уже хоть раз наконец!  RTFM :[ ну или хотя бы STFW...
marat_
Шеф-повар
Опытный

ru
Offline Offline

« Ответ #20 : 28-03-2008 15:19 » 

не, данные - файлы. мониторю директорию, при новых данных - посылаю сообщение соответствующему потоку... и всё..

а по Qt слышал немного, разве это только под *nix?
Записан
Ochkarik
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #21 : 28-03-2008 17:10 » 

marat_, не только, говорят кросплатформенная. на дельфи написанная)))))))
а мониторишь, - чем?
Записан

RTFM уже хоть раз наконец!  RTFM :[ ну или хотя бы STFW...
Finch
Спокойный
Администратор

il
Offline Offline
Пол: Мужской
Пролетал мимо


« Ответ #22 : 28-03-2008 20:44 » 

Ochkarik, Кто написана на дельфи? Qt есть только под С++ и под Java. Также есть Qtopia для мобильных систем. По условиям лицензии, для коммерческого использования, она платна.
Записан

Не будите спашяго дракона.
             Джаффар (Коша)
marat_
Шеф-повар
Опытный

ru
Offline Offline

« Ответ #23 : 29-03-2008 01:32 » 

Ochkarik, а findfirschange. тоже событийная штукенция
Записан
Ochkarik
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #24 : 31-03-2008 11:19 » 

Finch, эээ... пардоньте, фгню сморозил... бес - попутал! кто то мне сказал про QT и дельфи, а я видно не так понял... действительно С++...
marat_, она - да, событийная, просто она уже "есть")

PPPPPS
выяснил.
это мне говорили про среду разработки Kylix от Borland, которая под QT расчитана... паскаль через обертки. во как...
« Последнее редактирование: 06-08-2008 19:12 от Ochkarik » Записан

RTFM уже хоть раз наконец!  RTFM :[ ну или хотя бы STFW...
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines