Выпуск № 1360 от 27.07.2009, 11:05
Администратор рассылки: Dr_Andrew, Модератор
В рассылке: подписчиков - 637, экспертов - 157
В номере: вопросов - 1, ответов - 1
Нам очень важно Ваше мнение об этом выпуске рассылки. Вы можете оценить этот выпуск по пятибалльной шкале, пройдя по ссылке: оценить выпуск >>
Вопрос № 170685: Добрый день. C++ Builder 2009 Для увеличения быстродействия использую потоки. Основная процедура расчета разбита на 4 потока, все выполняются одновременно. while (True) { //Готовлю данные ... //Запускаю Raschet1 *...
Вопрос № 170685:
Добрый день. C++ Builder 2009 Для увеличения быстродействия использую потоки. Основная процедура расчета разбита на 4 потока, все выполняются одновременно.
while (True) { //Готовлю данные ... //Запускаю Raschet1 *Thr1 = new Raschot1(True); Thr1->Resume(); Raschet1 *Thr2 = new Raschet1(True); Thr2->Resume(); Raschet1 *Thr3 = new Raschet1(True); Thr3->Resume(); Raschet1 *Thr4 = new Raschet1(True); Thr4->Resume();
В принципе, все работает, но быстродействия достичь не удалось. Загрузка Core 2 Duo составляет 40-60%, ядра загружаются равномерно. Как показал ряд экспериментов, процессор простаивает на WaitFor(). Как уменьшить время простоя и увеличить с
корость работы?
Отвечает AMV007, 3-й класс :
Здравствуйте, Yandrey.
1. Если цикл быстро крутиться - то вся нагрузка будет на ядро системы, так как оно будет занято только созданием - удалением потоков. Поэтому потоки должны иметь работу скажем на 1-2 секунды хотя бы, чтобы реально почувствовать эффект от многопоточности таким способом. 2. Если поток надо экстренно завершить без долгого ожидания то лучше всего использовать Terminate(). 3. Если не удовлетворяет механизм waitfor, то можно использовать CreateEvent и соответственно WaitforsingleObject
Raschet1
*Thr1 = new Raschot1(True); Raschet1 *Thr2 = new Raschet1(True); Raschet1 *Thr3 = new Raschet1(True); Raschet1 *Thr4 = new Raschet1(True); Thr1->Resume(); Thr2->Resume(); Thr3->Resume(); Thr4->Resume();
while(true) { }
//Жду завершения Thr1->Terminate(); Thr2->Terminate(); Thr3->Terminate(); Thr4->Terminate();
Thr1->WaitFor(); Thr2->WaitFor();Thr3->WaitFor(); Thr4->WaitFor();
----- Работать, работать и еще раз работать (да не, шутка :) )
Ответ отправил: AMV007, 3-й класс
Ответ отправлен: 22.07.2009, 11:04
Как сказать этому эксперту "спасибо"?
Отправить SMS
#thank 252465
на номер 1151 (Россия) |
Еще номера >>
Вам помогли? Пожалуйста, поблагодарите эксперта за это!
Нам очень важно Ваше мнение об этом выпуске рассылки. Вы можете оценить этот выпуск по пятибалльной шкале, пройдя по ссылке: оценить выпуск >>
* Стоимость одного СМС-сообщения от 7.15 руб. и зависит от оператора сотовой связи.
(полный список тарифов)
** При ошибочном вводе номера ответа или текста #thank услуга считается оказанной, денежные средства не возвращаются.
*** Сумма выплаты эксперту-автору ответа расчитывается из суммы перечислений на портал от биллинговой компании.