Size: a a a

2021 July 04

RM

Roy Mustang in C++ Together 2.0
Не в этом дело
источник

RM

Roy Mustang in C++ Together 2.0
Два потока в любом случае конфликтуют
источник

RM

Roy Mustang in C++ Together 2.0
Поэтому логичней будет использовать потоки правильно
источник

RM

Roy Mustang in C++ Together 2.0
Когда один поток занят своими делами, то другой должен выполнять задачи
источник

RM

Roy Mustang in C++ Together 2.0
Зависит от того кто пишет
источник

RM

Roy Mustang in C++ Together 2.0
Основной поток большую часть времени будет занят выполнением другой задачи
источник

RM

Roy Mustang in C++ Together 2.0
Я не знаю насколько эта идея будет эффективной, но она должна быть быстрее
источник

RM

Roy Mustang in C++ Together 2.0
Идея та же N потоков в тред пуле ждут notify_one
источник

RM

Roy Mustang in C++ Together 2.0
Основной поток занимается вставкой задач
источник

RM

Roy Mustang in C++ Together 2.0
Когда разработчик добавляет задачу чтоб выполнить ее асинхронно, то эту задачу нужно добавить в queue (простая очередь внутри нашего класса)
источник

RM

Roy Mustang in C++ Together 2.0
Потом когда у нас вызывается метод Update мы должны сигнализировать о том, что основной поток вставляет элементы
источник

RM

Roy Mustang in C++ Together 2.0
Тут немного спорный момент конечно
источник

RM

Roy Mustang in C++ Together 2.0
В том плане, что должен ли основной поток каждый тик добавлять задачи из своей queue в очередь задач тред пула
источник

RM

Roy Mustang in C++ Together 2.0
Я думаю, логичней было бы передавать всю очередь в тред пул и ждать от него сигнала
источник

RM

Roy Mustang in C++ Together 2.0
Когда тред пул завершит все задачи, что ему дали, он сигналит
источник

RM

Roy Mustang in C++ Together 2.0
и основной поток когда вновь будет вызывать тик увидит что работа выполнена и отдаст новую очередь
источник

RM

Roy Mustang in C++ Together 2.0
Эту идею можно было бы сделать более эффективной, если бы мы разделили каждый поток
источник

RM

Roy Mustang in C++ Together 2.0
Чтоб каждый поток имел свою очередь
источник

RM

Roy Mustang in C++ Together 2.0
И наш основной поток будет сигнализировать каждому из них, разделяя задачи равномерно
источник

RM

Roy Mustang in C++ Together 2.0
Так мы добьемся параллелизма
источник