There will always be a main thread, there has to be, you cant draw or push to screen on background threads, there always has to be one thread controlling and distributing other threads. Because of how threading works this also means sometimes the main thread has to wait for the other threads to finish their given task before spitting a frame out (depending on if the code they write is thread safe or not)
Who said itās written from scratch? I think itās heavily based on FSX. I read an interview with MS representative saying how easily Asobo integrated FSX engine on their side with a some new rendering pipeline. Even when I see FS config file it has the same structure as FSX.cfg file! I really think itās mainly the good old FSX engine, maybe changed here and there to better suit modern hardware and add Azure data streaming. Even all these problems people report about CPU underutilization, unequal core utilization and still low fps are exactly the same as when FSX launched! My view is that Asobo will still be changing things and we can expect the game to run better on DX12 as DX12 will need a lot of rewrites, probably also in the core of the game to offload more tasks from CPU to GPU. On the other hand side there are examples that migration to DX12 didnāt improve performance dramatically. It depends on a game and its architecture.
I do understand 
Itās great to get your feedback and benchmark with a PC config like yours.
@NBKTHE1 The work that you actually need to do on the main thread is very low though, just some handling of some input commands (keyboard/mouse/controller). Iām not very familiar with the DirectX 11 API but I assume that it is capable of submitting commands on a different thread (as long as you donāt do so from multiple threads at the same time), hence the RenderThread in the FPS window.
Also, there is no need for a main thread to control the distribution of work to other threads. Even in a simple system you would have a queue from which the worker threads get their tasks (no main thread needed here). More advanced systems would use work stealing to improve data locality. For the couple of small tasks that need to run on the main thread you could have a separate work queue (main thread pulls from that queue; if itās empty the main thread will pull a task from the general work queue).
@dgtal15654 Youāre probably right. That also means that this sim/game will never get close to the performance we could have if they had written an engine from scratch with multi-threading and DX12 in mind.
The queue still needs to be have jobs scheduled in order to be performed, generally this is done on the main thread and off-loaded (at some point), these threads need to talk to the main one in order to work and be drawn (render thread being called from the main with queued draw calls).
But yes you are right, main thread has a run loop that deals with all events and interaction, this has to be on the main thread. Either way, i agree this can be improved, but obviously we know nothing of how this works internally in their code base so its all speculation and iām sure its insanely complicated.
Maybe they did a Nintendo and forgot to stick the optimise GCC flag on when compiling 
Thank you so much for that extremely informative analysis. I appreciate and admire your knowledge. I too have an i7 processor 6700K @ 4GHz. Every symptom you describe is precisely what I too am experiencing. So my question is: How do I enable HT as you suggested?
I also have performance collapses. As soon as you move/fly, there are massive FPS drops all the time. In between the FPS goes up to 40-45 repeatedly. The GPU is only 50-60% utilized. The CPU runs permanently at 100%. No cooling problems, latest drivers.
My system:
Intel i5 6600k (4.5Ghz),
Nvidia gtx 1080TI,
32GB Ram (3200 XMP),
SSDs only
Greetings
Martin
HT is enabled by default - its something you would of had to turn off manually. If you see in task manager (or some overlay in game) that you have 8 threads then its on, if you only see 4, then it off. Either way, you change this in the BIOS of your motherboard.
Then something is off, either with the FPS counter or the VSYNC.
With VSYNC on the GPU HAS to wait for the signal from the monitor that itās ready for the next frame. If the GPU isnāt producing frames at 60 FPS or higher, then the GPU must wait for the next signal from the monitor, this results in a halved frame rate. Itās how it work, thereās no changing that.
You either have a GSync monitor thatās helping with this, or the FPS readout is wrong, OR the Vsync in the game is adaptive (which it doesnāt say it is).
There has to be a main thread, this will then offload tasks to the worker thread, in theory. If youāre seeing a 100% usage in one thread and 20% in workers, then itās bad programming. They need to spread the load and THAT could be the fix to all this.
I wouldnāt be surprised if it was something like that. I noticed the executable is much larger in the release version. Maybe they compiled it with some debugging options. On the other hand, the marketplace was added the release version , so maybe that explains the huge difference in size.
I would guess this is the problem, Iāll try it today. There definitely is a problem where itās way too CPU heavy and not utilizing my video card or RAM at all. My CPU stays pegged at 95-100% even on the lowest settings, meanwhile my video card is sitting at 40%, less than 1GB of VRAM being utilized and only 9GB or standard RAM. Itās literally so light on my GPU that my fan doesnāt kick on. With a game like this my GPU should be maxed out as I only have an RX 5600XT. Itās definitely a load management issue.
I just see 4 cores. I got my system from JetLine systems and they overclocked the computer to get better performance from P3D. My understanding is that P3D ran better with hyperthreading turned off. It is safe to change this setting in the bios now? Iām not an expert. Thank you!
Exactly as in my case
I just thought Iād share this video here, itās a GPU performance benchmark with MSFS and it basically shows that we CANNOT max out this sim on current-gen hardware, so itās good to manage our expectations a bit. This is good as it leaves plenty of headroom for next-gen hardware and the sim will continue to push the boundaries and will get continuously better as we get new hardware technologies.
It should be safe. it has nothing to do with overclocking. Itās a CPU feature
@NBKTHE1 At the start of the frame you only have to āscheduleā 1 job (push it to a queue/ring buffer). That is picked up by some worker thread and as part of the job it may queue up new jobs (which are again picked up by worker threads). The āscheduleā of how the tasks are distributed across worker threads is not computed ahead of time. Itās basically emergent behavior of worker threads picking up tasks from the queue.
More on-topic: since the starting point (performance) is this bad, there must be a lot of low-hanging fruits when they start optimizing/parallelizing.
Normally it should be safe. In theory HT can increase the temperature of the CPU a bit, but itās unlikely it would cause stability issues. If it does, you might need to turn the overclocking down a notch or two.
The Hardware Unboxed benchmark shows that the sim bottlenecks really hard on a couple of CPU cores, he even mentions it near the end of the video. New hardware (more threads / faster GPU) isnāt going to fix that issue.
CPUās can be overclocked too.