НЕ ИМЕЙТЕ ОДНОЙ РЕЗЬБЫ НА ЛИЦО .Это рецепт катастрофы.Это не то, для чего были созданы темы.Нити очень тяжелые;помните, что каждый поток потребляет один миллион байтов виртуального адресного пространства немедленно .Кроме того, помните, что каждый раз, когда два потока взаимодействуют в общей структуре данных - например, в вашем смоделированном мире - они должны снимать блокировки, чтобы предотвратить повреждение.Ваша программа будет массой из сотен заблокированных тем, а заблокированные темы бесполезны;они не могут работать.Высокая конкуренция - это анафема хорошей производительности, а множество потоков, совместно использующих одну структуру данных, - это не что иное, как постоянная конкуренция.
Количество потоков в вашей программе должно составлять один , если только у вас нет очень хорошихпричина иметь два.В общем, количество потоков в программе должно быть настолько маленьким, насколько вы можете это сделать, при этом получая требуемые характеристики производительности.
Если ваша программа действительно "смущающе параллельна" -то есть очень легко выполнять вычисления параллельно без блокировки общей структуры данных - тогда правильное количество потоков равно количеству ядер процессора в машине.Помните, что потоки замедляют друг друга .Если у вас есть четыре кассира банка, и каждый обслуживает одного клиента, дела идут быстро.Вы описываете ситуацию, когда у вас есть четыре банковских кассира (ядра ЦП), каждый из которых обслуживает сто человек в то же время , раздавая копейки круговым методом.
Моделирование редко бывает смущающим, потому что трудно разбить работу на независимые части.Трассировка лучей, например, смущающе параллельна;содержимое одного пикселя не зависит от содержимого любого другого пикселя, поэтому его можно рассчитать параллельно.Но у вас не будет одной нити на пиксель!У вас будет один поток на процессор, и каждый из четырех процессоров будет работать с четвертью пикселей.Это сложно сделать с помощью симуляций, потому что сущности do взаимодействуют друг с другом.
Высококачественные профессиональные симуляторы, такие как физические движки, которые должны иметь дело с взаимодействующими сущностями, не решают свои проблемы с потоками.,Как правило, у них будет один поток, выполняющий моделирование, и один поток, выполняющий пользовательский интерфейс, чтобы при дорогостоящем вычислении моделирования не зависал пользовательский интерфейс.
Правильная архитектура для вас, вероятно, состоит в том, чтобы один поток шел как симулятор.Проработайте все взаимодействия объектов для одного кадра, а затем подайте сигнал потоку пользовательского интерфейса, который необходимо обновить.Это позволит вам определить максимальную частоту кадров, измерив, сколько микросекунд требуется для проработки всех взаимодействий каждой сущности.