Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 6 084

/ вопрос открыт /

Доброго времени суток, уважаемые эксперты!
Имеется составной вопрос:
1. Какие будут накладные расходы при создании 10-15 потоков, по сравнению с выполнением частей кода последовательно?
2. Как лучше организовать ожидание результата потоков?

Gooddy Вопрос ожидает решения (принимаются ответы, доступен мини-форум)

Вопрос задал: Gooddy (статус: 3-ий класс)
Вопрос отправлен: 18 апреля 2012, 03:16
Состояние вопроса: открыт, ответов: 1.

Ответ #1. Отвечает эксперт: Вадим К

Здравствуйте, Gooddy!
Если потоки будут молотить числа, то создавать их больше кол-ва ядер нет смысла. Если кол-во потоков больше кол-ва ядер, то будет даже замедление.
Если же потоки к примеру заняты тем, что скачивают что то с интернета, потом парсят и отправляют в базу, то тут может быть преимущество. В любом случае, "больше потоков" не всегда приводит к "быстрее работает". Я видел код, в котором создается сотня потоков, но работает медленно по той причине, что тело метода execute содержит один synchronyzed(some_method);. Понятно, что будть хоть 1024 процессора, работать оно быстрее не будет.

Ждать несколько потоков просто - для этого есть функция WaitForMultipleObjects.

Ответ отправил: Вадим К (статус: Академик)
Время отправки: 18 апреля 2012, 10:39
Оценка за ответ: 5


Мини-форум вопроса

Всего сообщений: 5; последнее сообщение — 19 апреля 2012, 19:10; участников в обсуждении: 3.
min@y™

min@y™ (статус: Доктор наук), 18 апреля 2012, 08:07 [#1]:

Цитата (Gooddy):

Какие будут накладные расходы при создании 10-15 потоков

А что ты подразумеваешь под накладными расходами?

Цитата (Gooddy):

Как лучше организовать ожидание результата потоков?

Ну, дык, есть жеж OnTerminate, к примеру.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
Gooddy

Gooddy (статус: 3-ий класс), 18 апреля 2012, 13:26 [#2]:

Под накладными расходами подразумеваю создание потока и ожидание его завершения.
Чисти код! Чисти код! Чисти код!
min@y™

min@y™ (статус: Доктор наук), 18 апреля 2012, 13:57 [#3]:

Цитата (Gooddy):

Под накладными расходами подразумеваю создание потока и ожидание его завершения.

Ну, дык, накропай тестовую прогу (оба варианта) и прикинь.

Цитата (Вадим К):

тело метода execute содержит один synchronyzed(some_method);

Я тоже такую хрень видал. Кто-то Фаронова начитался, видать.
Ты где пропадал-то? Я, уж, беспокоиться начал.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
Вадим К

Вадим К (статус: Академик), 18 апреля 2012, 14:49 [#4]:

Создание потока и его уничтожение не такая уж и дешевая операция. Поэтому, если нужно постоянно создавать-удалять потоки, то лучше создавать пул потоков (поток, который выполнил свою работу, не уничтожается, а помещается в "хранилище". Когда он будет нужен новый поток, он прост достается с этого "хранилища").
Также нужно понимать, что на каждый поток по умолчанию отводиться 1мегабайт памяти (если мы говорим о 32 битных системах), хотя при определенных настройках, это может быть и 512кб. Поэтому, на 32битной системе одно приложение обычно не может создать больше 4096 потоков (в реальности эта цифра в районе 700-800). А вот почему - это уже отдельный разговор.
Галочка "подтверждения прочтения" - вселенское зло.
Gooddy

Gooddy (статус: 3-ий класс), 19 апреля 2012, 19:10 [#5]:

Вот, спасибо. Пул потоков - отличная идея. Нужно статическое количество потоков (по ядрам процессора), но без идеи пула приходилось бы создавать до 20 новых, что например на двух-ядерном процессоре было бы если даже не расточительством, то уж точно дурным тоном.

Как мне кажется, помимо создания и уничтожения потока, его ожидание также будет довольно требовательно к ресурсам, так что видимо правда придётся написать и узнать реальный плюс к скорости.
Чисти код! Чисти код! Чисти код!

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 22 февраля 2025, 11:34
Выполнено за 0.03 сек.