проведите кто-нибудь ликбез по потокам ))
такие вот вопросы... есть у меня в программе функции обработки картинок... если их вынести в отдельные потоки, будут ли задействованны вторые там ядра у новых процессоров?
(под делфи 2005)
Прежде чем задать вопрос, смотрите FAQ.
Рекомендуем загрузить DRKB.
Наладить общение поможет, если вы подпишитесь по почте на новые темы в этом форуме.
| Snake_B |
Сообщение
#1
|
|
Пионер ![]() ![]() Группа: Пользователи Сообщений: 72 Пол: Мужской Репутация: 0 |
проведите кто-нибудь ликбез по потокам ))
такие вот вопросы... есть у меня в программе функции обработки картинок... если их вынести в отдельные потоки, будут ли задействованны вторые там ядра у новых процессоров? (под делфи 2005) |
![]() ![]() |
| volvo |
Сообщение
#2
|
|
Гость |
Цитата а сколько потоков максимально стоит создавать? Сколько нужно, столько и создавай. Потоки - они не просто так создаются. Скажем, пишешь ты VCL-приложение, и тебе нужно сделать какое-то длительное действие. Напишешь его в том же потоке - получишь "зависание" GUI, пока действие не закончится. Лечится, конечно, костылем ProcessMessages, но проще вынести вычисления в отдельный поток, чтоб они не мешали работе с интерфейсом.Учти, чем больше потоков ты создашь, тем больше тебе нужно будет заботиться об их взаимодействии. Если же у тебя потоки абсолютно независимы друг от друга (не читают данные из одного файла, не пишут в один файл, и так далее) - то оптимальное число потоков = число ядер * количество процессоров. Будешь делать больше - ускорения вычислений точно не получишь. Больше можно делать только, чтоб не "завешивать" основной поток на время выполнения "длительной" задачи. |
| Snake_B |
Сообщение
#3
|
|
Пионер ![]() ![]() Группа: Пользователи Сообщений: 72 Пол: Мужской Репутация: 0 |
Сколько нужно, столько и создавай. Потоки - они не просто так создаются. да меня и без них устраивает... но думается, что можно ими ускорить обработку (у меня то лично одноядерный)) Скажем, пишешь ты VCL-приложение, и тебе нужно сделать какое-то длительное действие. Напишешь его в том же потоке - получишь "зависание" GUI, пока действие не закончится. Лечится, конечно, костылем ProcessMessages, но проще вынести вычисления в отдельный поток, чтоб они не мешали работе с интерфейсом. было такое... сделал в отдельной программе на винапи... сейчас ещё есть отправка отчетов всяких на e-mail... программа во время отправки зависает... но если сделать в потоке, я же его остановить не смогу если что? или смогу? Учти, чем больше потоков ты создашь, тем больше тебе нужно будет заботиться об их взаимодействии. Если же у тебя потоки абсолютно независимы друг от друга (не читают данные из одного файла, не пишут в один файл, и так далее) - то оптимальное число потоков = число ядер * количество процессоров. да я пока без них обходился... а в этой программе куда прикрутить хочу, они да, будут абсолютно независимы... то оптимальное число потоков = число ядер * количество процессоров. вот тут и вопросы возникают... по хорошему получается надо определять индивидуально сколько этих самых "число ядер * количество процессоров" есть и столько потоков создавать... так? Будешь делать больше - ускорения вычислений точно не получишь. Больше можно делать только, чтоб не "завешивать" основной поток на время выполнения "длительной" задачи. да в общем понятно, что быстрее не будет... просто, чтобы не определять количество ядер сделать 4 потока... будет 4 ядра - будет быстрее, не будет - не будет медленне (вот тут и вопрос - не будет ли медленне).... хотя по хорошему так не правильно, наверно, это счас 4 ядра на топовых... а если через пару лет кто то программу будет использовать и ядер будет 8... лучше наверно определять их количество... да? )) п.с. и ещё один вопрос не по теме... вот в DRKB: Цитата так как код использует GetTickCount, возвращающий в миллисекундах время с момента старта системы, это необходимо для ежечасной инициализац ии кода выполнения задачи. По-моему это то, что вам нужно. Величина, возвращаемая GetTickCount имеет тип DWORD, но Delphi ее хранит как LongInt, поэтому большие значения могут иметь отрицательную величину (после примерно 25 дней). у меня программа считает сколько времени она отработала (люблю статистику)) и вот я заметил, что она иногда уходит в минус (я пока не уверен когда именно она это делает).... получается это из этого - "большие значения могут иметь отрицательную величину"? (в общем то других причин там быть не должно).... как с этим можно бороться? "var TimeLaunchProg: integer;" при запуске программы "TimeLaunchProg:=GetTickCount;" при закрытии "Сounter:=GetTickCount - TimeLaunchProg;" ну и там обработка... Сообщение отредактировано: Snake_B - |
Snake_B вопросы по потокам.... 17.09.2010 3:25
volvo Будут. И вторые, и третьи, и четвертые. Этим заним… 17.09.2010 4:25
Snake_B
Будут. И вторые, и третьи, и четвертые. Этим зани… 17.09.2010 4:55
Snake_B
Будут. И вторые, и третьи, и четвертые. Этим зани… 19.09.2010 17:56
Unconnected На одноядерном ускорится что-то вряд ли, просто уд… 20.09.2010 4:24
volvo А теперь - внимание, вопрос: А сколько это - в пре… 20.09.2010 4:40
Snake_B
Теперь по теме:
По хорошему - получается, что ПРО… 20.09.2010 5:22
Snake_B и снова вопросы ))
не совсем про потоки... но дума… 11.10.2010 16:17
мисс_граффити а "узкое место", думаешь - процессор? не… 11.10.2010 16:40
Snake_B
а "узкое место", думаешь - процессор? н… 11.10.2010 16:47
TarasBer > программа сжимает изображения в папке...
А п… 11.10.2010 23:36
Snake_B
> программа сжимает изображения в папке...
А … 12.10.2010 4:28
TarasBer У меня тут нет DRKB и канал маловат, чтоб лишние 1… 12.10.2010 12:33
Snake_B > Кстати, алгоритм из DRKB умеет бороть лесенки… 13.10.2010 3:26
volvo Вопрос не в оптимизации, если что. Вопрос - почему… 12.10.2010 14:07
Snake_B
Здесь дело в другом. Видно, какие-то системные фу… 2.01.2011 19:52
TarasBer > Так что тут надо смотреть всю программу, а не… 12.10.2010 14:29
volvo Я надеюсь, хотя бы BeginUpdate/EndUpdate для Memo … 2.01.2011 20:11
Snake_B
Я надеюсь, хотя бы BeginUpdate/EndUpdate для Memo… 2.01.2011 20:31![]() ![]() |
|
Текстовая версия | 6.11.2025 20:52 |