Toady could implement the multi core support little by little:
Like multithreading first the water flow on its own thread and rest of the stuff on its own
Then Graphics on its own thread, AI etc..
That's probably the plan. He said he's working on it more than we probably think.
The problem is not really to write the code so things run in different threads, but to ensure they're not stepping on each others toes while doing so, i.e. protecting all the data stores involved so they handle parallel access from multiple threads, as well as ensuring things are not processed out of order (e.g. flying creature in one thread, going upwards in a shaft, cave-in falling downwards. Without checks the upwards movement thread may check if the tile upwards is free, the cave-in thread will check if then next tile downwards contains anything to smash, both move to the same tile, but without colliding since the tile was free while checking. A worse case is a wear checking thread that meets a piece of clothing worn by a dorf being atom smashed. The dorfs is smashed, and all items worn are destroyed. At the same time the wear checking thread looks in its list for the next item to apply wear to, and goes to the -Pig Tail Sock- Urist wore before getting smashed. The sock no longer exists, so either wear is applied to a "random" piece of memory, which might now be used for something completely different, or the pointer now refers to memory not owned by the application, resulting in immediate program termination). You can get a lot of interesting bugs that are almost impossible to reproduce.