Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.82/11: Рейтинг темы: голосов - 11, средняя оценка - 4.82
Заблокирован
1

Как создать 1 000 000 потоков ?

18.11.2014, 16:13. Показов 2119. Ответов 15
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам


Нужно создать очень много потоков, даже больше чем в сабже... Возможно ли это? Известный факт, что например Windows уже начинает глючить на 60...80 К потоках... Как то можно я уж не знаю виртуализировать что ли потоки, чтоб можно было бы создавать их сколько угодно и ничего не тормозило бы?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
18.11.2014, 16:13
Ответы с готовыми решениями:

Целое значение близкое к 7 000 000 000
Здраствуйте, нашел так называемый проект ейлер с задачами для ищущих=) В общем задача найти самый...

Вывести на экран 1 000 000 чисел
Вывести на экран попорядку 1 000 000 чисел с максимальной скоростью выполнения операции. (С++)

Как получить битовую маску вида 100.000
Как получить битовую маску вида 100...000? первая 1, все остальные нули. ПРобовал так, но...

Создать массив чисел из диапазона [-100;100] размером 180 000. Вывести на экран. Найти время выполнения программы
Создать одномерный массив вещественных чисел из диапазона размером 180 000. Вывести на экран....

15
Почетный модератор
Эксперт С++
5850 / 2861 / 392
Регистрация: 01.11.2011
Сообщений: 6,907
18.11.2014, 16:27 2
А они должны при этом работать?
1
3257 / 2059 / 351
Регистрация: 24.11.2012
Сообщений: 4,909
18.11.2014, 16:27 3
Цитата Сообщение от -THE_MASTER666- Посмотреть сообщение
Нужно создать очень много потоков, даже больше чем в сабже...
А что - под столом стоит суперкомпьютер с миллионом ядер?
1
654 / 575 / 164
Регистрация: 13.12.2012
Сообщений: 2,124
18.11.2014, 16:29 4
мне кажется тебя система пошлет с таким запросом
1
Заблокирован
18.11.2014, 16:33  [ТС] 5
Цитата Сообщение от SatanaXIII Посмотреть сообщение
А они должны при этом работать?
Конечно! Хотя и выполнять они будут достаточно ограниченный ряд примитивных задач

Добавлено через 1 минуту
Цитата Сообщение от 0x10 Посмотреть сообщение
А что - под столом стоит суперкомпьютер с миллионом ядер?
Да в том то и дело, что нет. Но тут же не стоит задачи, чтоб все потоки на разных ядрах работали, задача в том, чтоб они просто асинхронно работали. Может тут подойдёт event-based программирование ...
0
Почетный модератор
Эксперт С++
5850 / 2861 / 392
Регистрация: 01.11.2011
Сообщений: 6,907
18.11.2014, 16:33 6
Цитата Сообщение от -THE_MASTER666- Посмотреть сообщение
Конечно! Хотя и выполнять они будут достаточно ограниченный ряд примитивных задач
Прикиньте на бумажке как часто каждый поток сможет провернуть хоть одну свою инструкцию.
1
2782 / 1935 / 570
Регистрация: 05.06.2014
Сообщений: 5,600
18.11.2014, 16:33 7
Каждому потоку нужен отдельный стек. Если мне не изменяет склероз, по умолчанию этот стек - один мегабайт. Возьми калькулятор и посчитай сколько это сожрет памяти. Короче, если нет уже упомянутого суперкомпьютера - не надо дурью маяться.
1
3257 / 2059 / 351
Регистрация: 24.11.2012
Сообщений: 4,909
18.11.2014, 16:35 8
Цитата Сообщение от -THE_MASTER666- Посмотреть сообщение
Да в том то и дело, что нет.
Значит, и не должно быть таких решений. Асинхронная модель должная подойти. Как реализовать - зависит от конкретной решаемой задачи. Если это, например, обработка множества клиентов на сервере - см epoll.
1
654 / 575 / 164
Регистрация: 13.12.2012
Сообщений: 2,124
18.11.2014, 16:36 9
-THE_MASTER666-, по теме, предалагаю почитать про такое понятие как "пул потоков"
1
Заблокирован
18.11.2014, 16:41  [ТС] 10
Цитата Сообщение от Renji Посмотреть сообщение
Короче, если нет уже упомянутого суперкомпьютера
У меня его нет, но если понадобится - и такой закажу, бюджет не ограничен http://3dnews.ru/assets/extern... istory.png

Цитата Сообщение от aLarman Посмотреть сообщение
по теме, предалагаю почитать про такое понятие как "пул потоков"
Да я в курсе, что это.

Цитата Сообщение от SatanaXIII Посмотреть сообщение
Прикиньте на бумажке как часто каждый поток сможет провернуть хоть одну свою инструкцию.
Цитата Сообщение от 0x10 Посмотреть сообщение
Значит, и не должно быть таких решений.
Ладно, понял - идею в топку, буду дальше думать.
0
Kastaneda
18.11.2014, 16:43
  #11

Не по теме:

Цитата Сообщение от -THE_MASTER666- Посмотреть сообщение
Ладно, понял - идею в топку, буду дальше думать.
Если б мне вообще пришла в голову мысль, что для решения моей задачи нужно over 1000000 потоков, я бы сразу подумал, что тут что-то не так :)

0
Заблокирован
18.11.2014, 16:53  [ТС] 12
Так, хорошо, а может кто - то что - то предложит
Есть набор из множества блочков разного кода С++, который на каждой итерации цикла желательно выполнить параллельно. Для всех блоков есть общая память.

Изначально думал запускать каждый блочок кода в отдельном потоке и чтоб он там всегда вертелся в своём лупе, но тогда загрузка проца всегда будет 100%.

Потом подумал в сторону EVENT - BASED стиля, чтоб потоки создавались и выполнялись по событиям, то есть когда надо выполнить 1000 потоков с разным исполняемым кодом - выполняю их в 1000 разных потоках. Но операция создания потока - очень дорогостоящая и создание даже 1000-и потоков будет занимать относительно много времени...

Может кто подкинет идейку?
То есть что у нас есть:
1. Множество наборов разного кода С++, подгружаемых в главный софт в рантайме при старте (допустим из DLL)
2. Общая память для них.
3. Нужно выполнят выполнять все эти наборы кода паралельно и желательно, чтоб они всё время выполнялись ...

Если б набор кода был одинаков для всех блоков, я б не парился и на CUDA бы сразу перекинул
0
3257 / 2059 / 351
Регистрация: 24.11.2012
Сообщений: 4,909
18.11.2014, 16:57 13
Цитата Сообщение от -THE_MASTER666- Посмотреть сообщение
Но операция создания потока - очень дорогостоящая и создание даже 1000-и потоков будет занимать относительно много времени
К этому и был упомянут пул потоков.

Добавлено через 2 минуты
Цитата Сообщение от -THE_MASTER666- Посмотреть сообщение
Есть набор из множества блочков разного кода С++, который на каждой итерации цикла желательно выполнить параллельно. Для всех блоков есть общая память.
Страшное это дело. Разный код, который выполняется с общими данными...
Если данные только на чтение - все равно. Если предполагается модификация, то начинаются блокировки и прочие радости.

Классика: заводим очередь задач. Помещаем в нее задачи на выполнение. Создаем пул потоков. По мере освобождения потоков извлекаем очередную задачу из очереди и передаем на выполнение.
2
2782 / 1935 / 570
Регистрация: 05.06.2014
Сообщений: 5,600
18.11.2014, 18:44 14
Цитата Сообщение от -THE_MASTER666- Посмотреть сообщение
Нужно выполнят выполнять все эти наборы кода паралельно и желательно, чтоб они всё время выполнялись ...
Параллельно выполняется столько процессов, сколько ядер в процессоре. Все сверх этого - эмуляция вида "миллисекунду выполняли процесс А, тормознули его. Миллисекунду выполняли процесс Б, тормознули его...". В некоторых задачах оно удобно, но что-то мне подсказывает что это не ваш случай.
0
Evg
Эксперт CАвтор FAQ
21279 / 8301 / 637
Регистрация: 30.03.2009
Сообщений: 22,659
Записей в блоге: 30
18.11.2014, 18:51 15
Реальной параллельности при исполнении миллиона потоков, как выше заметил коллега, не будет. Поэтому, грубо говоря, нужно организовать 10 потоков, каждый из которых выполняет по 100 тыщ добрых дел, и при этом дополнительно иммитировать, как будто бы исполнение всех добрых дел прошло параллельно
0
Заблокирован
18.11.2014, 19:18  [ТС] 16
Цитата Сообщение от Evg Посмотреть сообщение
Реальной параллельности при исполнении миллиона потоков, как выше заметил коллега, не будет.
Ну это и уже понятно, по этому я и не стал комментировать выше сказанное.
0
18.11.2014, 19:18
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
18.11.2014, 19:18
Помогаю со студенческими работами здесь

Как переделать программу, чтобы время ее выполнения было <1.000 sec?
Как переделать программу, чтобы время ее выполнения было &lt;1.000 sec. Например, при T=1 и...

Создать массив из 1 000 000 000 и более элементов, а потом заполнить и вывести его
создаю массив, и все идет нормально #include &lt;stdio.h&gt; #include &lt;malloc.h&gt; #include...

Как создать 1 000 000 строк без совпадений?
помогите дорогие друзья!!! как создать 1 000 000 строк без совпадений? делаю так private void...

Игровой ПК до 4 000 грн (12 000 -13 000 рублей)
Материнская плата Asus M5A78L-M LX3 Процессор AMD FX-4300 Память Kingston DDR3-1866 4096MB...


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

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru