IPB
ЛогинПароль:

> ВНИМАНИЕ!

Прежде чем задать вопрос, смотрите FAQ.
Рекомендуем загрузить DRKB.

> вопросы по потокам....
Snake_B
сообщение 16.09.2010 23:25
Сообщение #1


Пионер
**

Группа: Пользователи
Сообщений: 72
Пол: Мужской

Репутация: -  0  +


проведите кто-нибудь ликбез по потокам ))

такие вот вопросы... есть у меня в программе функции обработки картинок... если их вынести в отдельные потоки, будут ли задействованны вторые там ядра у новых процессоров?
(под делфи 2005)
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
volvo
сообщение 19.09.2010 14:16
Сообщение #2


Гость






Цитата
а сколько потоков максимально стоит создавать?
Сколько нужно, столько и создавай. Потоки - они не просто так создаются. Скажем, пишешь ты VCL-приложение, и тебе нужно сделать какое-то длительное действие. Напишешь его в том же потоке - получишь "зависание" GUI, пока действие не закончится. Лечится, конечно, костылем ProcessMessages, но проще вынести вычисления в отдельный поток, чтоб они не мешали работе с интерфейсом.

Учти, чем больше потоков ты создашь, тем больше тебе нужно будет заботиться об их взаимодействии. Если же у тебя потоки абсолютно независимы друг от друга (не читают данные из одного файла, не пишут в один файл, и так далее) - то оптимальное число потоков = число ядер * количество процессоров. Будешь делать больше - ускорения вычислений точно не получишь. Больше можно делать только, чтоб не "завешивать" основной поток на время выполнения "длительной" задачи.
 К началу страницы 
+ Ответить 
Snake_B
сообщение 19.09.2010 23:54
Сообщение #3


Пионер
**

Группа: Пользователи
Сообщений: 72
Пол: Мужской

Репутация: -  0  +


Цитата(volvo @ 19.09.2010 23:16) *

Сколько нужно, столько и создавай. Потоки - они не просто так создаются.


да меня и без них устраивает... но думается, что можно ими ускорить обработку (у меня то лично одноядерный))

Цитата(volvo @ 19.09.2010 23:16) *

Скажем, пишешь ты VCL-приложение, и тебе нужно сделать какое-то длительное действие. Напишешь его в том же потоке - получишь "зависание" GUI, пока действие не закончится. Лечится, конечно, костылем ProcessMessages, но проще вынести вычисления в отдельный поток, чтоб они не мешали работе с интерфейсом.


было такое... сделал в отдельной программе на винапи...
сейчас ещё есть отправка отчетов всяких на e-mail... программа во время отправки зависает... но если сделать в потоке, я же его остановить не смогу если что? или смогу?

Цитата(volvo @ 19.09.2010 23:16) *

Учти, чем больше потоков ты создашь, тем больше тебе нужно будет заботиться об их взаимодействии. Если же у тебя потоки абсолютно независимы друг от друга (не читают данные из одного файла, не пишут в один файл, и так далее) - то оптимальное число потоков = число ядер * количество процессоров.


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

Цитата(volvo @ 19.09.2010 23:16) *

то оптимальное число потоков = число ядер * количество процессоров.


вот тут и вопросы возникают... по хорошему получается надо определять индивидуально сколько этих самых
"число ядер * количество процессоров" есть и столько потоков создавать... так?

Цитата(volvo @ 19.09.2010 23:16) *

Будешь делать больше - ускорения вычислений точно не получишь. Больше можно делать только, чтоб не "завешивать" основной поток на время выполнения "длительной" задачи.


да в общем понятно, что быстрее не будет... просто, чтобы не определять количество ядер сделать 4 потока... будет 4 ядра - будет быстрее, не будет - не будет медленне (вот тут и вопрос - не будет ли медленне)....
хотя по хорошему так не правильно, наверно, это счас 4 ядра на топовых... а если через пару лет кто то программу будет использовать и ядер будет 8... лучше наверно определять их количество... да? ))

п.с. и ещё один вопрос не по теме...
вот в DRKB:
Цитата
так как код использует GetTickCount, возвращающий в миллисекундах время с момента старта системы, это необходимо для ежечасной инициализац ии кода выполнения задачи. По-моему это то, что вам нужно. Величина, возвращаемая GetTickCount имеет тип DWORD, но Delphi ее хранит как LongInt, поэтому большие значения могут иметь отрицательную величину (после примерно 25 дней).

у меня программа считает сколько времени она отработала (люблю статистику)) и вот я заметил, что она иногда уходит в минус (я пока не уверен когда именно она это делает).... получается это из этого - "большие значения могут иметь отрицательную величину"? (в общем то других причин там быть не должно).... как с этим можно бороться?

"var TimeLaunchProg: integer;"
при запуске программы "TimeLaunchProg:=GetTickCount;"
при закрытии "Сounter:=GetTickCount - TimeLaunchProg;"
ну и там обработка...

Сообщение отредактировано: Snake_B - 20.09.2010 0:14
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

Сообщений в этой теме
Snake_B   вопросы по потокам....   16.09.2010 23:25
volvo   Будут. И вторые, и третьи, и четвертые. Этим заним...   17.09.2010 0:25
Snake_B   Будут. И вторые, и третьи, и четвертые. Этим зани...   17.09.2010 0:55
Snake_B   Будут. И вторые, и третьи, и четвертые. Этим зани...   19.09.2010 13:56
volvo   Сколько нужно, столько и создавай. Потоки - они не...   19.09.2010 14:16
Snake_B   Сколько нужно, столько и создавай. Потоки - они н...   19.09.2010 23:54
Unconnected   На одноядерном ускорится что-то вряд ли, просто уд...   20.09.2010 0:24
volvo   А теперь - внимание, вопрос: А сколько это - в пре...   20.09.2010 0:40
Snake_B   Теперь по теме: По хорошему - получается, что ПРО...   20.09.2010 1:22
Snake_B   и снова вопросы )) не совсем про потоки... но дума...   11.10.2010 12:17
мисс_граффити   а "узкое место", думаешь - процессор? не...   11.10.2010 12:40
Snake_B   а "узкое место", думаешь - процессор? н...   11.10.2010 12:47
TarasBer   > программа сжимает изображения в папке... А п...   11.10.2010 19:36
Snake_B   > программа сжимает изображения в папке... А ...   12.10.2010 0:28
TarasBer   У меня тут нет DRKB и канал маловат, чтоб лишние 1...   12.10.2010 8:33
Snake_B   > Кстати, алгоритм из DRKB умеет бороть лесенки...   12.10.2010 23:26
volvo   Вопрос не в оптимизации, если что. Вопрос - почему...   12.10.2010 10:07
Snake_B   Здесь дело в другом. Видно, какие-то системные фу...   2.01.2011 15:52
TarasBer   > Так что тут надо смотреть всю программу, а не...   12.10.2010 10:29
volvo   Я надеюсь, хотя бы BeginUpdate/EndUpdate для Memo ...   2.01.2011 16:11
Snake_B   Я надеюсь, хотя бы BeginUpdate/EndUpdate для Memo...   2.01.2011 16:31


 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия 14.07.2025 23:16
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"