Нет, i это число шагов апгрейда каждого класса. Просто повторный вызов функции. А k это число экземпляров.
nop90h
> вообще это похоже на кривой thread pool
Больше похоже на использование околослучайного подбора под решение задачи.
А беда в том, что и задача толком не сформулирована.
Funtik
Можно более элегантно написать, не спорю. Это была проверка работоспособности на скорую руку. И я бы хотел, чтобы был механизм вот так в цикле вызывать функцию в потоке не пересоздавая объект потока. Но я не знаю его.
__sergey
> не пересоздавая объект ... Но я не знаю его.
Pool pattern?
вообще если планируете работать с многопоточкой то всё-таки надо написать свой пул потоков.
штука полезная.
и лучше написать этот пул самому - будете понимать как работает и сможете сделать дополнительный интересный функционал типа threadaffinity, NUMA и прочего. и С++ тут не поможет - придётся использовать API системы.
vka123
> вообще если планируете работать с многопоточкой то всё-таки надо написать свой пул потоков.
Это особенно важно под виндой, где потоки создаются кошмарно медленно. В юниксовых системах с этим проще, там можно потоки создавать на каждую разовую потребность.
__sergey
В курсе, что неумеренная параллельность создаст тебе дикие тормоза, а не ускорит работу, как ты видимо думаешь? Да еще и дедлоков наверняка нахватаешь повсюду.
Параллельность хороша ровно до до тех пор, пока у тебя на все свободных ядер хватает. Не хватает - начинается разделение времени, жутко не эффективный процесс. И чтобы система не загнулась от него, она делит время очень крупными кусками, порядка одной десятой секунды. Допустим, есть у тебя свободных шесть ядер, шесть потоков их заняли на десятую часть секунды, остальные порожденные потоки ждут когда эти шесть свой квант отработают и управления не получают.
__sergey
> тобы был механизм вот так в цикле вызывать функцию в потоке не пересоздавая объект потока.
в бусте есть asio, там есть thread_pool
но я бы на твоем месте базу подтянул, потому что пока складывается впечатление, что ты слабо понимаешь, что ты вообще делаешь.
Zab
> Да еще и дедлоков наверняка нахватаешь повсюду.
мне кажется, чел вообще не вкурсе, что нужна синхронизация
Zab
> Это особенно важно под виндой, где потоки создаются кошмарно медленно. В юниксовых системах с этим проще, там можно потоки создавать на каждую разовую потребность.
хмм, по моему и там и там это долго.
т.к. это системный вызов, причем не тривиальный.
откуда инфа, что в винде медленней ?
nop90h
> мне кажется, чел вообще не вкурсе, что нужна синхронизация
Да ладно, я метод сопряженных градиентов на вычислительных шейдерах делал. Попробуйте там группы синхронизировать. Могли бы просто посоветовать как это с пулом сделать. Задача-то вродете перь ясна. Просто псевдокод какой-нибудь.
__sergey
сперва надо избавиться от каши в голове.
и ответить себе (не мне) на вопрос, а занешь ли ты вообще, что такое канкаренси, что такое дата рэйс, зачем нужны примитивы синхронизации как из множества примитивов выбрать тот, который подходит тебе.
Если ответа на этот вопрос нет, то в многопоточность пока лезть не стоит.
Вот неплохой курс:
https://www.youtube.com/watch?v=zw6V3SDsXDk&list=PL4_hYwCyhAva37l… BcKRELso5nvBm
что касается asio thread_pool, то прямо в документации к нему есть пример
https://think-async.com/Asio/boost_asio_1_26_0/doc/html/boost_asi… ead_pool.html
nop90h
Это я все понимаю. Сейчас вопрос не об этом. Представим, что потоки не обращаются ни к каким общим данным. Мне надо разобраться с функциями буста. Просто вотэтот цикл с классами он в оконной процедуре выполняется, то есть в message loop еще вот этот цикл с потоками надо сделать. Пока работает только тот простой вариант. Надо чтобы примерно намекнули как с пулом делать
__sergey
> Мне надо разобраться с функциями буста
ну вот же, прямо в примере, в ссылке, которую кидал на доку по thread_pool
// Submit a lambda object to the pool. boost::asio::post(pool, []( ) { ... });
в лямбде захватываешь shared_ptr на инстанс и вызваешь из лямбды метод инстанса
сколько нужно программистов чтобы выполнить функцию в отдельном потоке?)
у Funtik в https://gamedev.ru/code/forum/?id=288761&page=2&m=6024878#m18
Рабочий код(логика), переделай его на буст и будет тебе счастье
Если конечно тебе не нужно чтобы все потоки работали с общими данными на запись, в этом случае рекомендую вообще отказаться от многопоточки.
Задал вопрос deepseek, вот что выдал:
Тема в архиве.