A weird thing I have been thinking about recently is the idea that “a computer can only do one thing at once at the top layer of abstraction”. Where “one thing” is loosely “run one program, one algorithm, one task/optimisation loop etc”. The base of this idea is this:
Suppose you had a Turing machine. For it to run two programs simultaneously (rather than just one followed by the other), it would need two heads. Furthermore, the heads must have separate state and transition tables. At which point you actually have two Turing machines reading and writing to the same tape. You can tell because, for them to share information between each other (suppose one of them is running a database and the other a webpage that displays information from the database) they actually have to write to the tape, creating a sequential lock between sending and receiving. This is not a problem a single Turing machine would ever have.
By this logic of course a laptop/phone is actually many computers running at once, which is pretty accurate given my understanding of multithreading issues. And even then it actually is quite close to “one thing” at the topmost level—There’s usually one active app or screen (it’s possible this is more to deal with the limitations of human users than the device itself). Same with humans, we can multitask but only by task switching.
Thanks for the clarity, it is helpful. Although of course a turing machine simulating unbounded concurrent turing macchines would be slower than the machines running independently.