TL;DR
Multithreading splitting by surfacesWhat?
As a software engineer myself, I understand why multithreading for game logic is not a part of Factorio for years: determinism model is good for multiplayer games with large files and lots of activities as it doesn't require constant sending of the whole state, but bad for parallelism as requires complicated algorithms to separate entities' calculations and many mutexes/checks to maintain consistency.However, I think, separate surfaces are quite segregated in terms of calculations, and hence be relatively easily processed separately in different threads (similar to different zones in MMO RPGs).
Of course, this approach will require centralised access/handling of global variables and actions (like technological researches), but I suppose it's solvable and we still will get a performance boost. And this will break API compatibility, but I believe this is a fine price for a such breakthrough; especially if new major version do this anyway.
Moreover, in multiplayer games, it seems possible and cool to allow client game instances process only the surface where a player's character located on.
This idea can be extended into handling different surfaces (or groups of them) by different servers, allowing to have even greater factory worlds...
Why?
We have a couple of premises:1. Some popular mods, where a single save file can contain lots of surfaces with large factories connected by relatively transfers of players and cargo.
2. In the coming brand new Factorio 2 Space Age similar mechanics will be a default part of the game.
And some desired sequences:
1. This will make large multi-surface single-player Factorio saves less laggy on most modern computers as they typically have 4-8 cores.
2. This will allow to have a dedicated powerful server with dozens of CPU cores to handle a large saves with many surfaces, meanwhile players with ordinary computers will be able to connect and play together, travelling and factorying across the same world. Kind of MMO!
PS. Some other players asked me to use my programming knowledge and think about a solution for the lack of multi-threading problem. Personally, I'd much more prefer to see better network performance of vehicles and fighting/shooting, as currently lags are make them unusable in multiplayer games... From a game design theory, I'm sure this would attract a broad audience providing opportunities for mental types of gamers to play together.