Заблокирован
|
|
1 | |
Как создать 1 000 000 потоков ?18.11.2014, 16:13. Показов 2119. Ответов 15
Метки нет (Все метки)
Нужно создать очень много потоков, даже больше чем в сабже... Возможно ли это? Известный факт, что например Windows уже начинает глючить на 60...80 К потоках... Как то можно я уж не знаю виртуализировать что ли потоки, чтоб можно было бы создавать их сколько угодно и ничего не тормозило бы?
0
|
18.11.2014, 16:13 | |
Ответы с готовыми решениями:
15
Целое значение близкое к 7 000 000 000 Вывести на экран 1 000 000 чисел Как получить битовую маску вида 100.000 Создать массив чисел из диапазона [-100;100] размером 180 000. Вывести на экран. Найти время выполнения программы |
Почетный модератор
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 |
1
|
654 / 575 / 164
Регистрация: 13.12.2012
Сообщений: 2,124
|
|
18.11.2014, 16:29 | 4 |
мне кажется тебя система пошлет с таким запросом
1
|
Заблокирован
|
|
18.11.2014, 16:33 [ТС] | 5 |
Конечно! Хотя и выполнять они будут достаточно ограниченный ряд примитивных задач
Добавлено через 1 минуту Да в том то и дело, что нет. Но тут же не стоит задачи, чтоб все потоки на разных ядрах работали, задача в том, чтоб они просто асинхронно работали. Может тут подойдёт event-based программирование ...
0
|
Почетный модератор
5850 / 2861 / 392
Регистрация: 01.11.2011
Сообщений: 6,907
|
|
18.11.2014, 16:33 | 6 |
Прикиньте на бумажке как часто каждый поток сможет провернуть хоть одну свою инструкцию.
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 |
Значит, и не должно быть таких решений. Асинхронная модель должная подойти. Как реализовать - зависит от конкретной решаемой задачи. Если это, например, обработка множества клиентов на сервере - см 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 |
У меня его нет, но если понадобится - и такой закажу, бюджет не ограничен http://3dnews.ru/assets/extern... istory.png
Да я в курсе, что это. Ладно, понял - идею в топку, буду дальше думать.
0
|
Kastaneda
|
18.11.2014, 16:43
#11
|
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 |
К этому и был упомянут пул потоков.
Добавлено через 2 минуты Страшное это дело. Разный код, который выполняется с общими данными... Если данные только на чтение - все равно. Если предполагается модификация, то начинаются блокировки и прочие радости. Классика: заводим очередь задач. Помещаем в нее задачи на выполнение. Создаем пул потоков. По мере освобождения потоков извлекаем очередную задачу из очереди и передаем на выполнение.
2
|
2782 / 1935 / 570
Регистрация: 05.06.2014
Сообщений: 5,600
|
|
18.11.2014, 18:44 | 14 |
Параллельно выполняется столько процессов, сколько ядер в процессоре. Все сверх этого - эмуляция вида "миллисекунду выполняли процесс А, тормознули его. Миллисекунду выполняли процесс Б, тормознули его...". В некоторых задачах оно удобно, но что-то мне подсказывает что это не ваш случай.
0
|
18.11.2014, 18:51 | 15 |
Реальной параллельности при исполнении миллиона потоков, как выше заметил коллега, не будет. Поэтому, грубо говоря, нужно организовать 10 потоков, каждый из которых выполняет по 100 тыщ добрых дел, и при этом дополнительно иммитировать, как будто бы исполнение всех добрых дел прошло параллельно
0
|
Заблокирован
|
|
18.11.2014, 19:18 [ТС] | 16 |
0
|
18.11.2014, 19:18 | |
18.11.2014, 19:18 | |
Помогаю со студенческими работами здесь
16
Как переделать программу, чтобы время ее выполнения было <1.000 sec? Создать массив из 1 000 000 000 и более элементов, а потом заполнить и вывести его Как создать 1 000 000 строк без совпадений? Игровой ПК до 4 000 грн (12 000 -13 000 рублей) Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |