Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
-THE_MASTER666-
Заблокирован
#1

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

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



Нужно создать очень много потоков, даже больше чем в сабже... Возможно ли это? Известный факт, что например Windows уже начинает глючить на 60...80 К потоках... Как то можно я уж не знаю виртуализировать что ли потоки, чтоб можно было бы создавать их сколько угодно и ничего не тормозило бы?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.11.2014, 16:13     Как создать 1 000 000 потоков ?
Посмотрите здесь:

C++ Вывести на экран 1 000 000 чисел
C++ нужен тип целого числа для числа 19!= 121 645 100 408 832 000
C++ Целое значение близкое к 7 000 000 000
C++ Как получить битовую маску вида 100.000
Даны числа a1, a2, . , a8. Верно ли, что их произведение меньше 10 000 с++ C++
C++ Создать несколько потоков и произвести в них вычисления
Создать разное количество потоков с возможностью ожидания события из одного потока в другом C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
SatanaXIII
Супер-модератор
Эксперт С++
5589 / 2623 / 239
Регистрация: 01.11.2011
Сообщений: 6,448
Завершенные тесты: 1
18.11.2014, 16:27     Как создать 1 000 000 потоков ? #2
А они должны при этом работать?
0x10
2455 / 1627 / 238
Регистрация: 24.11.2012
Сообщений: 4,003
18.11.2014, 16:27     Как создать 1 000 000 потоков ? #3
Цитата Сообщение от -THE_MASTER666- Посмотреть сообщение
Нужно создать очень много потоков, даже больше чем в сабже...
А что - под столом стоит суперкомпьютер с миллионом ядер?
aLarman
641 / 562 / 89
Регистрация: 13.12.2012
Сообщений: 2,109
18.11.2014, 16:29     Как создать 1 000 000 потоков ? #4
мне кажется тебя система пошлет с таким запросом
-THE_MASTER666-
Заблокирован
18.11.2014, 16:33  [ТС]     Как создать 1 000 000 потоков ? #5
Цитата Сообщение от SatanaXIII Посмотреть сообщение
А они должны при этом работать?
Конечно! Хотя и выполнять они будут достаточно ограниченный ряд примитивных задач

Добавлено через 1 минуту
Цитата Сообщение от 0x10 Посмотреть сообщение
А что - под столом стоит суперкомпьютер с миллионом ядер?
Да в том то и дело, что нет. Но тут же не стоит задачи, чтоб все потоки на разных ядрах работали, задача в том, чтоб они просто асинхронно работали. Может тут подойдёт event-based программирование ...
SatanaXIII
Супер-модератор
Эксперт С++
5589 / 2623 / 239
Регистрация: 01.11.2011
Сообщений: 6,448
Завершенные тесты: 1
18.11.2014, 16:33     Как создать 1 000 000 потоков ? #6
Цитата Сообщение от -THE_MASTER666- Посмотреть сообщение
Конечно! Хотя и выполнять они будут достаточно ограниченный ряд примитивных задач
Прикиньте на бумажке как часто каждый поток сможет провернуть хоть одну свою инструкцию.
Renji
1795 / 1213 / 283
Регистрация: 05.06.2014
Сообщений: 3,487
18.11.2014, 16:33     Как создать 1 000 000 потоков ? #7
Каждому потоку нужен отдельный стек. Если мне не изменяет склероз, по умолчанию этот стек - один мегабайт. Возьми калькулятор и посчитай сколько это сожрет памяти. Короче, если нет уже упомянутого суперкомпьютера - не надо дурью маяться.
0x10
2455 / 1627 / 238
Регистрация: 24.11.2012
Сообщений: 4,003
18.11.2014, 16:35     Как создать 1 000 000 потоков ? #8
Цитата Сообщение от -THE_MASTER666- Посмотреть сообщение
Да в том то и дело, что нет.
Значит, и не должно быть таких решений. Асинхронная модель должная подойти. Как реализовать - зависит от конкретной решаемой задачи. Если это, например, обработка множества клиентов на сервере - см epoll.
aLarman
641 / 562 / 89
Регистрация: 13.12.2012
Сообщений: 2,109
18.11.2014, 16:36     Как создать 1 000 000 потоков ? #9
-THE_MASTER666-, по теме, предалагаю почитать про такое понятие как "пул потоков"
-THE_MASTER666-
Заблокирован
18.11.2014, 16:41  [ТС]     Как создать 1 000 000 потоков ? #10
Цитата Сообщение от Renji Посмотреть сообщение
Короче, если нет уже упомянутого суперкомпьютера
У меня его нет, но если понадобится - и такой закажу, бюджет не ограничен http://3dnews.ru/assets/external/ill...ge-History.png

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

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

Не по теме:

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

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

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

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

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

Если б набор кода был одинаков для всех блоков, я б не парился и на CUDA бы сразу перекинул
0x10
2455 / 1627 / 238
Регистрация: 24.11.2012
Сообщений: 4,003
18.11.2014, 16:57     Как создать 1 000 000 потоков ? #13
Цитата Сообщение от -THE_MASTER666- Посмотреть сообщение
Но операция создания потока - очень дорогостоящая и создание даже 1000-и потоков будет занимать относительно много времени
К этому и был упомянут пул потоков.

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

Классика: заводим очередь задач. Помещаем в нее задачи на выполнение. Создаем пул потоков. По мере освобождения потоков извлекаем очередную задачу из очереди и передаем на выполнение.
Renji
1795 / 1213 / 283
Регистрация: 05.06.2014
Сообщений: 3,487
18.11.2014, 18:44     Как создать 1 000 000 потоков ? #14
Цитата Сообщение от -THE_MASTER666- Посмотреть сообщение
Нужно выполнят выполнять все эти наборы кода паралельно и желательно, чтоб они всё время выполнялись ...
Параллельно выполняется столько процессов, сколько ядер в процессоре. Все сверх этого - эмуляция вида "миллисекунду выполняли процесс А, тормознули его. Миллисекунду выполняли процесс Б, тормознули его...". В некоторых задачах оно удобно, но что-то мне подсказывает что это не ваш случай.
Evg
Эксперт CАвтор FAQ
17391 / 5629 / 352
Регистрация: 30.03.2009
Сообщений: 15,416
Записей в блоге: 26
18.11.2014, 18:51     Как создать 1 000 000 потоков ? #15
Реальной параллельности при исполнении миллиона потоков, как выше заметил коллега, не будет. Поэтому, грубо говоря, нужно организовать 10 потоков, каждый из которых выполняет по 100 тыщ добрых дел, и при этом дополнительно иммитировать, как будто бы исполнение всех добрых дел прошло параллельно
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.11.2014, 19:18     Как создать 1 000 000 потоков ?
Еще ссылки по теме:

C++ Поиск подстроки в тексте, который состоит из более чем 200 000 символов
C++ Вывести список товаров, стоимость которых превышает 100 000 рублей
C++ Массив структур: вывести список товаров, стоимость которых превышает 100 000 рублей
Сколькими способами можно разменять 100 000 рублей на монеты 1, 2, 5 рублей? C++
C++ Создать две функции потоков, которые выполняют следующие расчеты:

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

Или воспользуйтесь поиском по форуму:
-THE_MASTER666-
Заблокирован
18.11.2014, 19:18  [ТС]     Как создать 1 000 000 потоков ? #16
Цитата Сообщение от Evg Посмотреть сообщение
Реальной параллельности при исполнении миллиона потоков, как выше заметил коллега, не будет.
Ну это и уже понятно, по этому я и не стал комментировать выше сказанное.
Yandex
Объявления
18.11.2014, 19:18     Как создать 1 000 000 потоков ?
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru