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.
A single Turing machine can perfectly emulate any number of independent concurrently running Turing machines (including an unbounded number), so I’m not sure that the distinction for abstract machines is relevant.
In the physical realm, it is certainly true that modern computers actually contain many different physical computers. Though again, one physical computer can also emulate multiple physical computers so the distinction isn’t all that great there either.
I do think that most of the apparent limitation is actually a human limitation. My computer at the moment is doing at least half a dozen different top-level tasks (i.e. not just housekeeping or support tasks), but most of them are not constantly competing for my limited human attention on the physical screen at once.
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.
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.
A single Turing machine can perfectly emulate any number of independent concurrently running Turing machines (including an unbounded number), so I’m not sure that the distinction for abstract machines is relevant.
In the physical realm, it is certainly true that modern computers actually contain many different physical computers. Though again, one physical computer can also emulate multiple physical computers so the distinction isn’t all that great there either.
I do think that most of the apparent limitation is actually a human limitation. My computer at the moment is doing at least half a dozen different top-level tasks (i.e. not just housekeeping or support tasks), but most of them are not constantly competing for my limited human attention on the physical screen at once.
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.