The @synchronized mutex around input queue handling is something like 20% of our running cost; tidied up code layout a little to start to address that.
One option is to tell the BDOS which queue it’ll be called on for execution; in that case the only synchronisation expense will be hopping to insert input from the main queue, which is a lot more rare than reading input back. The very first step towards that is creating the serial dispatch queue before the BDOS…