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

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

Восстановить пароль Регистрация
 
-THE_MASTER666-
Заблокирован
18.11.2014, 16:13     Как создать 1 000 000 потоков ? #1


Нужно создать очень много потоков, даже больше чем в сабже... Возможно ли это? Известный факт, что например Windows уже начинает глючить на 60...80 К потоках... Как то можно я уж не знаю виртуализировать что ли потоки, чтоб можно было бы создавать их сколько угодно и ничего не тормозило бы?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
SatanaXIII
Супер-модератор
Эксперт С++
 Аватар для SatanaXIII
5548 / 2562 / 233
Регистрация: 01.11.2011
Сообщений: 6,332
Завершенные тесты: 1
18.11.2014, 16:27     Как создать 1 000 000 потоков ? #2
А они должны при этом работать?
0x10
2425 / 1597 / 232
Регистрация: 24.11.2012
Сообщений: 3,919
18.11.2014, 16:27     Как создать 1 000 000 потоков ? #3
Цитата Сообщение от -THE_MASTER666- Посмотреть сообщение
Нужно создать очень много потоков, даже больше чем в сабже...
А что - под столом стоит суперкомпьютер с миллионом ядер?
aLarman
636 / 557 / 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
Супер-модератор
Эксперт С++
 Аватар для SatanaXIII
5548 / 2562 / 233
Регистрация: 01.11.2011
Сообщений: 6,332
Завершенные тесты: 1
18.11.2014, 16:33     Как создать 1 000 000 потоков ? #6
Цитата Сообщение от -THE_MASTER666- Посмотреть сообщение
Конечно! Хотя и выполнять они будут достаточно ограниченный ряд примитивных задач
Прикиньте на бумажке как часто каждый поток сможет провернуть хоть одну свою инструкцию.
Renji
1534 / 982 / 240
Регистрация: 05.06.2014
Сообщений: 2,958
18.11.2014, 16:33     Как создать 1 000 000 потоков ? #7
Каждому потоку нужен отдельный стек. Если мне не изменяет склероз, по умолчанию этот стек - один мегабайт. Возьми калькулятор и посчитай сколько это сожрет памяти. Короче, если нет уже упомянутого суперкомпьютера - не надо дурью маяться.
0x10
2425 / 1597 / 232
Регистрация: 24.11.2012
Сообщений: 3,919
18.11.2014, 16:35     Как создать 1 000 000 потоков ? #8
Цитата Сообщение от -THE_MASTER666- Посмотреть сообщение
Да в том то и дело, что нет.
Значит, и не должно быть таких решений. Асинхронная модель должная подойти. Как реализовать - зависит от конкретной решаемой задачи. Если это, например, обработка множества клиентов на сервере - см epoll.
aLarman
636 / 557 / 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
2425 / 1597 / 232
Регистрация: 24.11.2012
Сообщений: 3,919
18.11.2014, 16:57     Как создать 1 000 000 потоков ? #13
Цитата Сообщение от -THE_MASTER666- Посмотреть сообщение
Но операция создания потока - очень дорогостоящая и создание даже 1000-и потоков будет занимать относительно много времени
К этому и был упомянут пул потоков.

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

Классика: заводим очередь задач. Помещаем в нее задачи на выполнение. Создаем пул потоков. По мере освобождения потоков извлекаем очередную задачу из очереди и передаем на выполнение.
Renji
1534 / 982 / 240
Регистрация: 05.06.2014
Сообщений: 2,958
18.11.2014, 18:44     Как создать 1 000 000 потоков ? #14
Цитата Сообщение от -THE_MASTER666- Посмотреть сообщение
Нужно выполнят выполнять все эти наборы кода паралельно и желательно, чтоб они всё время выполнялись ...
Параллельно выполняется столько процессов, сколько ядер в процессоре. Все сверх этого - эмуляция вида "миллисекунду выполняли процесс А, тормознули его. Миллисекунду выполняли процесс Б, тормознули его...". В некоторых задачах оно удобно, но что-то мне подсказывает что это не ваш случай.
Evg
Эксперт С++Автор FAQ
 Аватар для Evg
16825 / 5246 / 321
Регистрация: 30.03.2009
Сообщений: 14,126
Записей в блоге: 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++ Вывести список товаров, стоимость которых превышает 100 000 рублей
C++ Массив структур: вывести список товаров, стоимость которых превышает 100 000 рублей
Сколькими способами можно разменять 100 000 рублей на монеты 1, 2, 5 рублей? C++

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

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

Текущее время: 01:10. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru