ПрограммированиеФорумОбщее

boost::thread (2 стр)

Страницы: 1 2 3 4 5 Следующая »
#15
20:39, 16 фев 2025

Нет, i это число шагов апгрейда каждого класса. Просто повторный вызов функции. А k это число экземпляров.

#16
20:42, 16 фев 2025

nop90h
> вообще это похоже на кривой thread pool

Больше похоже на использование околослучайного подбора под решение задачи.
А беда в том, что и задача толком не сформулирована.

#17
21:21, 16 фев 2025

Funtik

Можно более элегантно написать, не спорю. Это была проверка работоспособности на скорую руку. И я бы хотел, чтобы был механизм вот так в цикле вызывать функцию в потоке не пересоздавая объект потока. Но я не знаю его.

#18
21:52, 16 фев 2025

__sergey
> не пересоздавая объект ... Но я не знаю его.

Pool pattern?

#19
22:37, 16 фев 2025

вообще если планируете работать с многопоточкой  то всё-таки надо написать свой пул потоков.
штука полезная.
и лучше написать этот пул самому - будете понимать как работает и сможете сделать дополнительный интересный функционал типа threadaffinity, NUMA и прочего. и С++ тут не поможет - придётся использовать API системы.

#20
3:01, 17 фев 2025

vka123
> вообще если планируете работать с многопоточкой то всё-таки надо написать свой пул потоков.
Это особенно важно под виндой, где потоки создаются кошмарно медленно. В юниксовых системах с этим проще, там можно потоки создавать на каждую разовую потребность.

#21
3:09, 17 фев 2025

__sergey
В курсе, что неумеренная параллельность создаст тебе дикие тормоза, а не ускорит работу, как ты видимо думаешь? Да еще и дедлоков наверняка нахватаешь повсюду.
Параллельность хороша ровно до до тех пор, пока у тебя на все свободных ядер хватает. Не хватает - начинается разделение времени, жутко не эффективный процесс. И чтобы система не загнулась от него, она делит время очень крупными кусками, порядка одной десятой секунды. Допустим, есть у тебя свободных шесть ядер, шесть потоков их заняли на десятую часть секунды, остальные порожденные потоки ждут когда эти шесть свой квант отработают и управления не получают.

#22
6:07, 17 фев 2025

__sergey
> тобы был механизм вот так в цикле вызывать функцию в потоке не пересоздавая объект потока.
в бусте есть asio, там есть thread_pool
но я бы на твоем месте базу подтянул, потому что пока складывается впечатление, что ты слабо понимаешь, что ты вообще делаешь.

Zab
> Да еще и дедлоков наверняка нахватаешь повсюду.
мне кажется, чел вообще не вкурсе, что нужна синхронизация

#23
6:37, 17 фев 2025

Zab
> Это особенно важно под виндой, где потоки создаются кошмарно медленно. В юниксовых системах с этим проще, там можно потоки создавать на каждую разовую потребность.
хмм, по моему и там и там это долго.
т.к. это системный вызов, причем не тривиальный.
откуда инфа, что в винде медленней ?

#24
9:27, 17 фев 2025


nop90h
> мне кажется, чел вообще не вкурсе, что нужна синхронизация
Да ладно, я метод сопряженных градиентов на вычислительных шейдерах делал. Попробуйте там группы синхронизировать. Могли бы просто посоветовать как это с пулом сделать. Задача-то вродете перь ясна. Просто псевдокод какой-нибудь.

#25
9:36, 17 фев 2025

__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

#26
9:47, 17 фев 2025

nop90h
Это я все понимаю. Сейчас вопрос не об этом. Представим, что потоки не обращаются ни к каким общим данным. Мне надо разобраться с функциями буста. Просто вотэтот цикл с классами он в оконной процедуре выполняется, то есть в message loop еще вот этот цикл с потоками надо сделать. Пока работает только тот простой вариант. Надо чтобы примерно намекнули как с пулом делать

#27
10:13, 17 фев 2025

__sergey
> Мне надо разобраться с функциями буста
ну вот же, прямо в примере, в ссылке, которую кидал на доку по thread_pool

// Submit a lambda object to the pool.
boost::asio::post(pool,
    []()
    {
      ...
    });

в лямбде захватываешь shared_ptr на инстанс и вызваешь из лямбды метод инстанса

#28
13:39, 17 фев 2025

сколько нужно программистов чтобы выполнить функцию в отдельном потоке?)

у Funtik в https://gamedev.ru/code/forum/?id=288761&page=2&m=6024878#m18
Рабочий код(логика), переделай его на буст и будет тебе счастье
Если конечно тебе не нужно чтобы все потоки работали с общими данными на запись, в этом случае рекомендую вообще отказаться от многопоточки.

#29
14:19, 17 фев 2025

Задал вопрос deepseek, вот что выдал:

+ Показать
Страницы: 1 2 3 4 5 Следующая »
ПрограммированиеФорумОбщее

Тема в архиве.