Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.87/79: Рейтинг темы: голосов - 79, средняя оценка - 4.87
3 / 3 / 1
Регистрация: 21.01.2011
Сообщений: 27

Вопрос про многопоточность и производительность

28.10.2011, 02:03. Показов 16550. Ответов 40
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте!
Подскажите пожалуйста ответы на следующие вопросы:

1) Правда ли,что многопоточность в программе позволяет увеличить производительность программы, т.е снизить загрузку ЦП?

2)Например есть программный код. Можно ли каким-нибудь образом, используя определенные средства отладки, посмотреть сколько системных ресурсов(а именно загрузка ЦП) едят отдельные куски этого кода? Т.е узнать, на сколько цикл грузит систему или часть определенной подпрограммы?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
28.10.2011, 02:03
Ответы с готовыми решениями:

Производительность CPU, КЕШ, многопоточность
Доброго времени суток! Суть проблемы - есть курсовой по системному программированию но я не знаю с чего и начать ( Тема:...

Вопрос про многопоточность
В википедии написано: Одни и те же данные - это понятно (глобальные и/или статические переменные, или одна переменная, переданная...

Про многопоточность
Здравствуйте. Подскажите пожалуйста вот какой вопрос: когда выполняется программа в многопоточном(с помощью создания экземпляров класса...

40
278 / 174 / 21
Регистрация: 10.07.2011
Сообщений: 441
29.10.2011, 08:27
Студворк — интернет-сервис помощи студентам
kravam, при все уважении, Deviaphan только что подтвердил то что я написал выше.
0
 Аватар для taras atavin
4226 / 1796 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
29.10.2011, 08:35
Цитата Сообщение от greeezz Посмотреть сообщение
kravam,к примеру ваш одноядерный процессор в состоянии выполнять N операций в секунду. к примеру для чтения файла ваш программа в один поток занимает n/10 операций в секунду. почему бы не добавить еще пару потоков которые займут образно говоря еще 2n/10 операций в секунду. поправьте если я не ошибаюсь.
Поток занимает не число операций в секунду, а просто число операций. А число операций в секунду - это характеристика процессора. Вот представь: тебе надо проехать 1000 км. Не 1000 км/ч, а именно 1000 км, это расстояние. И надо перевести на это расстояние грузы. У тебя есть машина, с грузом едущая со скоростью 100 км/ч, но возвращающаяся порожняком мгновенно. Взять два груза сразу нельзя. Делим расстояние на скорость и получаем время - 10 часов. Чтоб проехать быстрее, надо форсировать двигатель и ехать 120 км/ч (разгон процессора). Но не имеет значение, хочешь ли ты проехать с одним грузом 1000 км (1 поток), или перевести 10 грузов на 100 км (10 потоков), с ограниченной скоростью ты всё равно проедешь 1000 км. А многоядерный процессор - это несколько таких машин. Пусть у тебя их две. Если у тебя одна дорога и один груз (один поток), то ты можешь отправлять обе машины, скорость всё равно 100 км/ч и время 10 ч. Но если ты хочешь перевести два груза на 500 км, или 10 грузов на 100 км, то можно отправить одну машину (один поток), а можешь обе. Первый случай - это тот же одноядерник. А во втором сколько проедет каждая машина? 500 км. И время 500/100=5ч. Но нагрузка на двуядерный процессор - это сумма нагрузок на ядра. Если ты одну машину используешь на 100%, а вторую не используешь, то общая нагрузка 50% (ресурсы то двойные и процентное выражение нагрузки на процесор есть средний процент нагрузки на ядра). А если обе машины использовать на 100%, то и общая нагрузка 100%.

Добавлено через 2 минуты
Цитата Сообщение от Deviaphan Посмотреть сообщение
РЕчь о том, что на однопроцессорном компьютере может выполняться более одного потока в единицу времени.
Не может.
0
Делаю внезапно и красиво
Эксперт С++
 Аватар для Deviaphan
1313 / 1228 / 72
Регистрация: 22.03.2011
Сообщений: 3,744
29.10.2011, 08:40
Цитата Сообщение от taras atavin Посмотреть сообщение
Не может.
Повторяю. В процессе чтения файла процессор практически не используется. Т.е. он простаивает. Если программа многопоточная, то в это же самое время (не после а прям именно в это же время) может работать другой поток. Если другого потока нет, то в это время может выполняться другой процесс.
Именно благодаря этому многие идиомы параллельного программирования появились задолго до появления многопроцессорных компьютеров.
0
278 / 174 / 21
Регистрация: 10.07.2011
Сообщений: 441
29.10.2011, 08:43
taras atavin, я понимаю о чем вы говорите... но все дело в том что процессор действительно простаивает и когда он простаивает то другой поток занимает "свободное время". я не говорю что в одном ядре два потока работаю асинхронно. они работаю синхронно. но при наличии более одного потока у вас есть возможность использовать процессор более эффективно за счет использования времени "простоя" процессора. понятное дело что нельзя до бесконечности увеличивать количество потоков потому что время простоя с каждым новым потоком уменьшается.
0
Заблокирован
29.10.2011, 08:51
kravam, есть такая штука Hyper-Threading, и она впервые появилась в одноядерном пентиуме4. Вот что пишут сами интеловцы
Each
logical processor consists of a full set of IA-32 data registers, segment registers,
control registers, debug registers, and most of the MSRs. Each also has its own
advanced programmable interrupt controller (APIC).
Unlike a traditional MP system configuration that uses two or more separate physical
IA-32 processors, the logical processors in an IA-32 processor supporting Intel HT
Technology share the core resources of the physical processor
.
This configuration allows two or more
threads to be executed simultaneously on each a physical processor
.
а один поток может выполняется на машине с одним или более процессоров, про нольпроцессорные это сарказм?
0
 Аватар для taras atavin
4226 / 1796 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
29.10.2011, 08:54
Цитата Сообщение от Deviaphan Посмотреть сообщение
Если программа многопоточная, то в это же самое время (не после а прям именно в это же время) может работать другой поток.
Одноядерник не может исполнять несколько потоков в единицу времени. Процессор простаивает ан файловой и может выполнять другой поток? Эйси. И что? В многопоточном приложении любой процессор выполняет только другие потоки во время файловой операции.
0
Заблокирован
29.10.2011, 08:57
Цитата Сообщение от taras atavin Посмотреть сообщение
Одноядерник не может исполнять несколько потоков в единицу времени
с хипертредингом может!
0
return (true);
 Аватар для mimicria
1977 / 1112 / 221
Регистрация: 19.04.2011
Сообщений: 2,346
29.10.2011, 09:01
Цитата Сообщение от LosAngeles Посмотреть сообщение
с хипертредингом может!
Не может. С HT другой поток выполняется во время простоя первого
1
Заблокирован
29.10.2011, 09:06
Цитата Сообщение от mimicria Посмотреть сообщение
Не может. С HT другой поток выполняется во время простоя первого
конечно, но для операционной системе это прозрачно и я придерживаюсь терминологии интел, а они дали недвусмысленный ответ, что два или более потоков могут одновременно выполняться на одном физическом процессоре!
0
Делаю внезапно и красиво
Эксперт С++
 Аватар для Deviaphan
1313 / 1228 / 72
Регистрация: 22.03.2011
Сообщений: 3,744
29.10.2011, 09:18
Цитата Сообщение от taras atavin Посмотреть сообщение
многопоточном приложении любой процессор выполняет только другие потоки во время файловой операции.
Операции чтения/записи выполняются не процессором, а контроллером (условно говоря). Программа ожидает прерывание от контроллера, чтобы продолжить работу (тоже условно говоря). Во время этого ожидания процессор ничем не занят. И его можно занять.
Мне уже скучно...

Добавлено через 1 минуту
PS. HT работает только для "слабо загруженных" приложений. Если приложение на 100% загружает конвеер команд и процессор, то HT бесполезен.
0
return (true);
 Аватар для mimicria
1977 / 1112 / 221
Регистрация: 19.04.2011
Сообщений: 2,346
29.10.2011, 09:20
Цитата Сообщение от LosAngeles Посмотреть сообщение
конечно, но для операционной системе это прозрачно
Всё равно следует понимать, что поскольку процессор один на два потока (за исключением своих регистров и прерываний), то и используется он в каждый момент времени только одним потоком
0
Делаю внезапно и красиво
Эксперт С++
 Аватар для Deviaphan
1313 / 1228 / 72
Регистрация: 22.03.2011
Сообщений: 3,744
29.10.2011, 09:37
Цитата Сообщение от mimicria Посмотреть сообщение
то и используется он в каждый момент времени только одним потоком
У меня никогда не было процессора с НТ, поэтому я сильно не вдавался, но насколько помнится, там параллельность основывается на использовании конвеера команд. Пока один поток конвеер заполняет, второй поток вторым конвеером пользуется. Т.е. параллельность достигается за счёт того, что во время исполнения комманд одного потока происходит декодирование команд второго потока. Как-то так вроде.
Надо этой технологии побольше внимания уделить, раз интел её опять внедрило.)
0
Заблокирован
29.10.2011, 09:39
Цитата Сообщение от mimicria Посмотреть сообщение
Всё равно следует понимать, что поскольку процессор один на два потока (за исключением своих регистров и прерываний), то и используется он в каждый момент времени только одним потоком
читай внимательней, в одной из моих цитат об этом написано и выделенно жирным шрифтом
0
быдлокодер
 Аватар для kravam
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,705
29.10.2011, 10:47
LosAngeles, так-то я в английсколм не силён.
the logical processors in an IA-32 processor supporting Intel HT
Technology share the core resources of the physical processor
.

Я так понял какая-то технология разделяет ядерные ресурсы физического процессора.
То есть дядьки создали физический процессор, а потом создали технологию, которая позволяет из него одного сделать два?

А чё бы сразу два-то не сделать?
0
Делаю внезапно и красиво
Эксперт С++
 Аватар для Deviaphan
1313 / 1228 / 72
Регистрация: 22.03.2011
Сообщений: 3,744
29.10.2011, 11:03
Принцип действия Hyper-Threading основывается на том, что в каждый момент времени только часть ресурсов процессора используется при выполнении программного кода. Неиспользуемые ресурсы также можно загрузить работой -- например, задействовать для параллельного выполнения еще одного приложения (либо другого потока этого же приложения).
Чтобы много не копипастить.
0
return (true);
 Аватар для mimicria
1977 / 1112 / 221
Регистрация: 19.04.2011
Сообщений: 2,346
29.10.2011, 12:14
Тоже скопипастю
Когда при исполнении потока одним из логических процессоров возникает пауза (в результате кэш-промаха, ошибки предсказания ветвлений, ожидания результата предыдущей инструкции), то управление передаётся потоку в другом логическом процессоре. Таким образом пока один процесс ждёт, например данные из памяти, вычислительные ресурсы физического процессора используются для обработки другого процесса.
Итог всё равно такой - не одновременно, а пока один из потоков на паузе.
0
Делаю внезапно и красиво
Эксперт С++
 Аватар для Deviaphan
1313 / 1228 / 72
Регистрация: 22.03.2011
Сообщений: 3,744
29.10.2011, 12:24
Цитата Сообщение от mimicria Посмотреть сообщение
а пока один из потоков на паузе
Цитата Сообщение от mimicria Посмотреть сообщение
один процесс ждёт, например данные из памяти
В том числе дисковой памяти. О чём и идёт речь. Пока один поток ждёт завершения чтения, второй выполняет работу. При этом, первый поток только считывает данные из файла и не делает с ними ничего другого. То, что поток в процессе чтения не загружает процесор, это не наша проблема. Факт в другом, пока первый поток читает данные из файла, второй использует свободные ресурсы процессора.
В контексте чтения файла, я говорил о многопоточном приложении на однопроцессорном компьютере без НТ, разумеется.

Добавлено через 2 минуты
Цитата Сообщение от Deviaphan Посмотреть сообщение
Пока один поток ждёт завершения чтения, второй выполняет работу
Причём, первый поток не бездействует, в нём осуществляется чтение файла, но процессор не используется. Одновременно с чтением файла выполняется работа вторым потоком.
1
 Аватар для taras atavin
4226 / 1796 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
29.10.2011, 12:40
Цитата Сообщение от Deviaphan Посмотреть сообщение
Причём, первый поток не бездействует, в нём осуществляется чтение файла, но процессор не используется.
Ну а я о чём? Файловый поток исполняет не процессор, процессор не исполняет.
0
Делаю внезапно и красиво
Эксперт С++
 Аватар для Deviaphan
1313 / 1228 / 72
Регистрация: 22.03.2011
Сообщений: 3,744
29.10.2011, 12:44
Цитата Сообщение от taras atavin Посмотреть сообщение
Ну а я о чём? Файловый поток исполняет не процессор, процессор не исполняет.
Я это в первом сообщении ещё сказал. Что чтение выполняется "контроллером", поток ожидает прерывания. Второй в это время работает. Но ведь разговор не о том, процессор или кто-то ещё работает, разговор о том, что чтение файла и работа второго процессора происходит одновременно.
0
 Аватар для taras atavin
4226 / 1796 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
29.10.2011, 13:00
А я пишу о том, что скорость наращивается за счёт большей нарузки на процессор. Или уменьшение простоев - это снижение нагрузки? И конкретно время загрузки не зависит ни от потоков, ни от ядер. Если кроме загрузки надо делать что то ещё, то можно те операции вынести в отдельный поток, но делить саму загрузку на несколько потоков бессмысленно, быстрее она не произойдёт, если только не с разных дисков.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
29.10.2011, 13:00

моя первая плата, хедеры - вопрос про eagle или про пайку
До сих пор я паял платы на однослойных платах для прототипирования - примерно вот таких http://www.ebay.som/itm/221207693405 Один из...

Вопрос про обратную связь, и про схемотехнику полумоста
Добрый день) Я сейчас делаю схему от уважаемого rost c форума http://www.psb-kots.ru/forum/ , и мне непонятны некоторые моменты, а тот...

Книга про многопоточность
Добрый день, посоветуйте пожалуйста хорошую книгу по C#, где должным образом описана технология многопоточности. Джеффри Рихтер CLR via...

Книга про многопоточность
Подскажите пожалуйста, в какой книге лучше написано про многопоточность, синхронизацию. И где есть хорошие примеры. Например, работа с...

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


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
Сезонность закисления почв
anaschu 04.07.2026
200 часов это все равно моловато. Есть ситуации, но нестандартные, когда смена происходит за 5 лет. Но обычно это 50 лет и более. Наверное, закисление почвы происходит сезонно в средней. . .
В чем ценность человеческого опыта в глобальном смысле?
kumehtar 03.07.2026
Возможно, ценность человека не в том, что он однажды достигает мудрости, а в том, что он становится носителем карты пути. Он знает не только истину, но и последовательность внутренних изменений,. . .
интеграция AnyLogic с самописным REST API и переход на Odoo
anaschu 03.07.2026
Успешная интеграция AnyLogic с самописным REST API и переход на промышленную Odoo WMS Сегодня проделал огромный путь от простой симуляции физических процессов до построения полноценной. . .
Поиск всех путей на ориентированном графе. Linux
dcc0 02.07.2026
Переработка старого кода из моей статьи. Через несколько переработок от PHP кода к C89 (надеюсь, 89). Но довольно запутанно получилось. Код для Linux. Но если убрать time и то, что с ним. . .
Сам себя обучал rest api
anaschu 02.07.2026
Педагогический лайфхак: Почему чистый REST API для ученика намного круче, чем готовые библиотеки Когда мы отказались от капризного JAR-файла AnyLogic и переписали код на стандартный HttpClient,. . .
rest api anylogic - выполнение модели на своём русском сайте
anaschu 02.07.2026
Как подружиться с AnyLogic Cloud API, победить провайдеров и развернуться Java-бэкенд в Docker на бесплатном хостинге: Двухдневный лог борьбы Всем привет! Хочу поделиться свежим (и довольно. . .
Где деньги лежат
kumehtar 02.07.2026
Это - японская подводная лодка I-52 (тип C2, кодовое имя Momi) вышла из Японии в марте 1944 года с миссией в оккупированную немцами Францию (Лорьян). Это была одна из «Янаги»-миссий по обмену. . .
Krabik для WoW 3.3.5a, многоязычный
AmbA 02.07.2026
Допилил бота, думаю что окончательно. Изменения: - добавлена многоязычность - добавлено снятие скриншотов - добавлено поддержание бафов хождения по воде (для жреца, дк и шамана) - и так, по. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru