Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

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

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

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



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

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

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

Как получить битовую маску вида 100.000 - C++
Как получить битовую маску вида 100...000? первая 1, все остальные нули. ПРобовал так, но почему-то не работает: DWORD mask = ~((~0) >>...

Даны числа a1, a2, . , a8. Верно ли, что их произведение меньше 10 000 с++ - C++
Даны числа a1, a2, ... , a8. Верно ли, что их произведение меньше 10 000 с++

Вывести список товаров, стоимость которых превышает 100 000 рублей - C++
Список товаров, имеющихся на складе, включает в себя наименование товара, количество единиц товара, цену единицы и дату поступления товара...

Поиск подстроки в тексте, который состоит из более чем 200 000 символов - C++
имеется строка (в string) длиной около 200к символов подскажите каким лучше образов искать в этой строке все выражения начинающие на rw...

15
SatanaXIII
Супер-модератор
Эксперт С++
5618 / 2653 / 246
Регистрация: 01.11.2011
Сообщений: 6,549
Завершенные тесты: 1
18.11.2014, 16:27 #2
А они должны при этом работать?
1
0x10
2478 / 1651 / 247
Регистрация: 24.11.2012
Сообщений: 4,087
18.11.2014, 16:27 #3
Цитата Сообщение от -THE_MASTER666- Посмотреть сообщение
Нужно создать очень много потоков, даже больше чем в сабже...
А что - под столом стоит суперкомпьютер с миллионом ядер?
1
aLarman
642 / 563 / 89
Регистрация: 13.12.2012
Сообщений: 2,109
18.11.2014, 16:29 #4
мне кажется тебя система пошлет с таким запросом
1
-THE_MASTER666-
Заблокирован
18.11.2014, 16:33  [ТС] #5
Цитата Сообщение от SatanaXIII Посмотреть сообщение
А они должны при этом работать?
Конечно! Хотя и выполнять они будут достаточно ограниченный ряд примитивных задач

Добавлено через 1 минуту
Цитата Сообщение от 0x10 Посмотреть сообщение
А что - под столом стоит суперкомпьютер с миллионом ядер?
Да в том то и дело, что нет. Но тут же не стоит задачи, чтоб все потоки на разных ядрах работали, задача в том, чтоб они просто асинхронно работали. Может тут подойдёт event-based программирование ...
0
SatanaXIII
Супер-модератор
Эксперт С++
5618 / 2653 / 246
Регистрация: 01.11.2011
Сообщений: 6,549
Завершенные тесты: 1
18.11.2014, 16:33 #6
Цитата Сообщение от -THE_MASTER666- Посмотреть сообщение
Конечно! Хотя и выполнять они будут достаточно ограниченный ряд примитивных задач
Прикиньте на бумажке как часто каждый поток сможет провернуть хоть одну свою инструкцию.
1
Renji
1963 / 1361 / 307
Регистрация: 05.06.2014
Сообщений: 3,893
18.11.2014, 16:33 #7
Каждому потоку нужен отдельный стек. Если мне не изменяет склероз, по умолчанию этот стек - один мегабайт. Возьми калькулятор и посчитай сколько это сожрет памяти. Короче, если нет уже упомянутого суперкомпьютера - не надо дурью маяться.
1
0x10
2478 / 1651 / 247
Регистрация: 24.11.2012
Сообщений: 4,087
18.11.2014, 16:35 #8
Цитата Сообщение от -THE_MASTER666- Посмотреть сообщение
Да в том то и дело, что нет.
Значит, и не должно быть таких решений. Асинхронная модель должная подойти. Как реализовать - зависит от конкретной решаемой задачи. Если это, например, обработка множества клиентов на сервере - см epoll.
1
aLarman
642 / 563 / 89
Регистрация: 13.12.2012
Сообщений: 2,109
18.11.2014, 16:36 #9
-THE_MASTER666-, по теме, предалагаю почитать про такое понятие как "пул потоков"
1
-THE_MASTER666-
Заблокирован
18.11.2014, 16:41  [ТС] #10
Цитата Сообщение от Renji Посмотреть сообщение
Короче, если нет уже упомянутого суперкомпьютера
У меня его нет, но если понадобится - и такой закажу, бюджет не ограничен http://3dnews.ru/assets/external/ill...ge-History.png

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

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

Не по теме:

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

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

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

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

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

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

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

Классика: заводим очередь задач. Помещаем в нее задачи на выполнение. Создаем пул потоков. По мере освобождения потоков извлекаем очередную задачу из очереди и передаем на выполнение.
2
Renji
1963 / 1361 / 307
Регистрация: 05.06.2014
Сообщений: 3,893
18.11.2014, 18:44 #14
Цитата Сообщение от -THE_MASTER666- Посмотреть сообщение
Нужно выполнят выполнять все эти наборы кода паралельно и желательно, чтоб они всё время выполнялись ...
Параллельно выполняется столько процессов, сколько ядер в процессоре. Все сверх этого - эмуляция вида "миллисекунду выполняли процесс А, тормознули его. Миллисекунду выполняли процесс Б, тормознули его...". В некоторых задачах оно удобно, но что-то мне подсказывает что это не ваш случай.
0
Evg
Эксперт CАвтор FAQ
18241 / 6366 / 435
Регистрация: 30.03.2009
Сообщений: 17,594
Записей в блоге: 28
18.11.2014, 18:51 #15
Реальной параллельности при исполнении миллиона потоков, как выше заметил коллега, не будет. Поэтому, грубо говоря, нужно организовать 10 потоков, каждый из которых выполняет по 100 тыщ добрых дел, и при этом дополнительно иммитировать, как будто бы исполнение всех добрых дел прошло параллельно
0
18.11.2014, 18:51
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.11.2014, 18:51
Привет! Вот еще темы с ответами:

Массив структур: вывести список товаров, стоимость которых превышает 100 000 рублей - C++
Создать массив структур. Выполнить задание и вывести на экран полученный результат. Список товаров, имеющихся на ...

Сколькими способами можно разменять 100 000 рублей на монеты 1, 2, 5 рублей? - C++
Задача такова: сколькими способами можно разменять 100 000 рублей на монеты 1 2 5 рублей,то есть нужно выписать количество решений...

нужен тип целого числа для числа 19!= 121 645 100 408 832 000 - C++
Нужно посчитать сумму цифр целого положительного числа. double summacifr(double chislo) { double summa=0; while(chislo) ...

Создать несколько потоков и произвести в них вычисления - C++
Народ помогите создать программу которая создает несколько потоков и производит в них вычисления. Количество потоков должно задаваться при...


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Опции темы

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