@ProCxx

Страница 953 из 2477
Mike
11.06.2017
12:56:25
народ подскажите каким путём пойти для организации потокобезопасных классов, что использовать task c++11, OpenMP, Microsoft PPL, или ещё что порыть

Surreal
11.06.2017
13:00:51
Если задача легко решается тем, что есть в стандартной либе, то, естественно, лучше использовать ее. Только не используйте std::async, с остальным проблем там нет.

Mike
11.06.2017
13:02:15
async я читал что много на неё ругаются но не копал особо бо ней, так что не предовал ей внимание

Google
Surreal
11.06.2017
13:10:36
А что с асинк?
Если вам раз в минуту или реже надо что-то сделать асинхронно, то ничего особо страшного нет. В остальных случаях лучше написать свой\взять готовый планировщик\очередь с пулом, т.к. для std::async не указан способ выбора потока для исполнения и, например, в винде это, вроде, пул потоков по количеству потоков процессора, а в линуксе это просто новый поток на каждый вызов. И для запуска всего 2 политики, а политика по-умолчанию не указана.

Mike
11.06.2017
13:12:46
думаю каким путём пойти... использовать систему сообщений между классами или писать что либо другое

Surreal
11.06.2017
13:15:38
Найдите среди открытых проектов что-нибудь похожее на вашу задачу и посмотрите, как там реализовано.

Если классы дожны знать какой-то общий POD статус, то можно std::atomic использовать, если должны ждать статус, то добавить std::condition_variable.

Square
11.06.2017
13:21:33
народ подскажите каким путём пойти для организации потокобезопасных классов, что использовать task c++11, OpenMP, Microsoft PPL, или ещё что порыть
Я не знаю конечно что надо, но да, тоже двачую за атомики - для обмена инфой самое оно в примитивном случае... Можно подробнее про контекст? От него все зависит...

Mike
11.06.2017
13:32:58
если в краце то взял за основу организацию классов в Unty3D и формирую классы подобным образом, но в юнити нет поддержки обработки классов из разных потоков, в силу многих обстоятельств... все работы связанные с основными классами должны выполняться в основном потоке... хотелось бы попробывать организовать что то подобное но с возможностью общей связью с классами... так же в юнити есть организация связей через сообщения...

вот и думаю стоит поробывать или однопоточный способ организовать но так чтобы легко расширялось на будущее

desu
11.06.2017
13:36:08
Многопоточный 3д движек

Mike
11.06.2017
13:36:22
сам юнити написан на плюсах а шарпы всеголоишь образуют обёртку над функционалом плюсов

фреймворк ))

desu
11.06.2017
13:37:44
Наверное все общение между потоков нивелирует все хорошее что можно получить

Google
Square
11.06.2017
13:39:17
Классы просто должны быть потокобезопасны?

Или их инстансы будут меняться инфой?

Mike
11.06.2017
13:39:59
если знаете то в юнити цикл обработки gameObject'ов проходит по его компонентам и вот тут т.к. GO по сути являются независимыми объектами можно организовать паралельность обработки.(за исключением если есть чёткая цепочка выполнения GO)

Mike
11.06.2017
13:41:55
т.е выполняем строго описанный цикл обработки GO 1,2... n. А остальные GO по сути можно выполнить хаотично( но тут проблемы в пользовании общими ресурсами)

либо организовать некий пул с орзанизацией доступа по сообщениями либо хз

Square
11.06.2017
13:43:44
Некий пул либо хз :)

Mike
11.06.2017
13:43:48
пока варианты перебираю, решил спросить есть ли варианты у вас

Surreal
11.06.2017
13:44:35
Если я правильно понял, то необходимо параллельно обрабатывать игровые объекты. Т.к. один объект сразу в 2х потоках обрабатывать скорее всего нельзя, то создать просто пул, куда кидать задачу и объект.

Square
11.06.2017
13:44:46
Если есть куча объектов и их надо обработать - то map парадигма - то что надо

Surreal
11.06.2017
13:46:09
Если я правильно понял, то необходимо параллельно обрабатывать игровые объекты. Т.к. один объект сразу в 2х потоках обрабатывать скорее всего нельзя, то создать просто пул, куда кидать задачу и объект.
Если один объект можно сразу в нескольких потоках обрабатывать, то нужно продумать удобный механизм лока секций объекта, которые в данный момент обрабатываются и которые нельзя трогать. Либо разбить объект на несколько объектов и также кидать задачи в планировщик.

Mike
11.06.2017
13:47:49
сама по себе заадача интересная, может я сильно копнул ))

Surreal
11.06.2017
13:47:52
Один объект из разных потоков - так се кмк
Ага, но я встречал подобное где-то. Там вокруг геттеров были локи.

Google
Square
11.06.2017
13:48:51
сама по себе заадача интересная, может я сильно копнул ))
Ну если бы ещё представлять цель... Обобщим... если есть куча объектов и их надо параллельно обработать - пул потоков и тредсейф контейнер с объектами. Потоки попают объекты и делают работу

Mike
11.06.2017
13:50:09
[In reply to Mike Gamaev] Ну если бы ещё представлять цель... Что именно объяснить?

Surreal
11.06.2017
13:50:54
Вообще в играх стараются обрабатывать однотипные объекты одной пачкой в одном потоке, чтобы и параллельно и от кэша выигрыш получить. Т.е. делают планировщик, куда кидают вектор объектов и их обработчик с приоритетом.

Mike
11.06.2017
13:54:49
я завис.. )) пытаюсь понять о чём речь

Square
11.06.2017
13:56:40
я завис.. )) пытаюсь понять о чём речь
Для скорости - обработчик должен забирать данные пачками. В вашем случае, если GO хранятся в каком то контейнере - то надо забирать сразу несколько объектов на обработку

Mike
11.06.2017
13:57:25
я смотрю то что скинул в Гите

Square
11.06.2017
13:57:33
А, локфри очередь

Для межпоточного обмена

Square
11.06.2017
13:58:12
Создал инстанс, напихал туда объектов и запустил потоки... все просто

Surreal
11.06.2017
14:01:21
я завис.. )) пытаюсь понять о чём речь
Группируйте одинаковые объекты и обрабатывайте их вместе. Т.е. у вас есть пачка объектов A, к которым надо с заданными интервалами применять метод B. Храните в векторе или деке (условно) все объекты типа А и отдавайте их в планировщик. Можно и планировщик умный написать, который будет не просто всю пачку в одном потоке копать, но, в зависимости от необработанного размера пачки и количества свободных потоков, подключать еще один поток на обработку пачки, пока не придет что-нибудь с более высоким приоритетом. Тут все вашей фантазией ограничивается на самом деле.

Mike
11.06.2017
14:01:23
нужно поруть данные на гите чтобы понять

пытаюсь понять как этим пользоваться

что происходит под копотом

Lazy Ghost ‮ ‮
11.06.2017
14:32:04
if (argv[1][i] - !!a != a[i]) Что значат два восклицательных знака?

Mike
11.06.2017
14:33:06
операция перед (!a != a[i])

Google
Lazy Ghost ‮ ‮
11.06.2017
14:40:16
Не понятно все равно. Есть массив a[], который содержит строку. Что проверяет это условие?

Tema
11.06.2017
14:43:12
Никита
11.06.2017
14:43:52
Не понятно все равно. Есть массив a[], который содержит строку. Что проверяет это условие?
если массив а расположен не по нулевому адресу, то проверяет не равен ли i-ый элемент из аргументов командной строки минус один i-ому элементу массива а

если по нулевому, то без минус один

Lazy Ghost ‮ ‮
11.06.2017
14:45:17
Спасибо большое

Никита
11.06.2017
14:45:40
да не за что, если скинешь больше кода, могу предположить, зачем такой хак

Admin
ERROR: S client not available

Lazy Ghost ‮ ‮
11.06.2017
14:46:19
Я в личку скину позже, не против?

Никита
11.06.2017
14:46:24
ок

Anton
11.06.2017
14:47:20
Ребят, вопрос такой возинк. Как обычно поступают компиляторы в ситуации, когда конструкторы копирования попадают в подмножество конструкторов-шаблонов? Пример: template<typename T> class A { public: template<template U> A(const A<U> &a); template<template U> A(A<U> &&a); }

Anatoly
11.06.2017
15:45:58
в твоем случае, компилятор сгенерирует конструктор копирования самостоятельно, как если бы ты объявил A(const A& ) = default;

Berkus
11.06.2017
16:07:16
Mike
11.06.2017
18:00:14
а ссылку можно?

И по поводу этого вкраце может ктонибудь объяснить его принцип работы https://github.com/cameron314/concurrentqueue/blob/master/concurrentqueue.h

Google
Artem
11.06.2017
18:08:21
ты читал?

Simon
11.06.2017
18:10:03
Artem
11.06.2017
18:10:04
и наверное это должен был быть первый вопрос - ты понимаешь, что такое compare-and-swap (cmpxchg) и вот это все?

Simon
11.06.2017
18:11:13
и наверное это должен был быть первый вопрос - ты понимаешь, что такое compare-and-swap (cmpxchg) и вот это все?
вот мне интересно, как долго может прождать пишущий в очередь с cas с допустим 50 пишущими

Artem
11.06.2017
18:12:09
вот мне интересно, как долго может прождать пишущий в очередь с cas с допустим 50 пишущими
достаточно долго, чтобы не строить риал-тайм системы на этом)

50 пишущих это повод разбить запись на несколько буферов

Simon
11.06.2017
18:13:04
Наверн в худшем случае от количества пишущих зависит

Artem
11.06.2017
18:13:20
с меньшим количеством конкурирующих за запись и конкуренцией буферов за флаш в очередь

от всего зависит, в том числе от удачи-неудачи. тут нет детерминизма

Simon
11.06.2017
18:15:04
неудача это когда первым должен писать, а в итоге последним это делаешь :[

Artem
11.06.2017
18:15:42
неудача это когда система строится на предположении о том, что кто-то первым должен писать

Mike
11.06.2017
18:16:02
ты читал?
не особо понятно

и наверное это должен был быть первый вопрос - ты понимаешь, что такое compare-and-swap (cmpxchg) и вот это все?
Ты об этой атомарной процессорной команде? https://ru.wikipedia.org/wiki/Сравнение_с_обменом

Artem
11.06.2017
18:26:17
да

Mike
11.06.2017
18:26:42
ну конечно знаю и

Surreal
11.06.2017
18:37:42
не особо понятно
Там же есть описание идеи и методов. Берите и пользуйтесь.

Mike
11.06.2017
18:43:47
с переводчиком не особо понятно

нашёл вот это https://habrahabr.ru/post/245837/

я не знаю неужели только у меня такая понацея пользоваться только теми вещями которые понимаю...

Страница 953 из 2477