Resource-loading is easy enough to handle via thread pools
. You have to make a decision as to what to display during loading, however. It could just be a loading screen, or it could be like in Unreal Engine where low-quality textures are loaded first (and can cause a stall, although it is rare that it does) and as higher-quality texture data is loaded things suddenly gain more detail.
This can be extended to also dynamically flush and reload resources behind-the-scenes to try to allow loading an indefinite amount of resources, which your engine would have to decide to how page in and out.
If you are looking for other ways to utilize 2 cores, again you can just do the multi-threaded rendering technique with a custom command buffer.
Also input should be on its own thread (on Windows it has to be the main thread since input is sent as window messages) since that is the only reliable way to time-stamp the input values you get. This is necessary for smooth processing of input data.
My recommended setup for Windows would be:
Main thread dedicated to input.
2nd thread runs game logic.
3rd thread does rendering.
4th thread does sound processing (and runs on a lower priority, often sleeping).
These 4 threads are dedicated (always running).
Then the thread pool can be used to send more threads out to handle resource loading etc.
It is amazing how often people try to be unique, and yet they are always trying to make others be like them. - L. Spiro 2011
I spent most of my life learning the courage it takes to go out and get what I want. Now that I have it, I am not sure exactly what it is that I want. - L. Spiro 2013
I went to my local Subway once to find some guy yelling at the staff. When someone finally came to take my order and asked, “May I help you?”, I replied, “Yeah, I’ll have one asshole to go.”
L. Spiro Engine: http://lspiroengine.com
L. Spiro Engine Forums: http://lspiroengine.com/forums