Its because Emacs doesn't really have a way of performing asynchronous io. So lsp ends up blocking on the external server waiting for a reply.
It been the main pain point for addung smarter autocomplete for years now.
It been the main pain point for addung smarter autocomplete for years now.
However, lots of packages simply don't use these affordances.
Also, for LSP, there's additional challenges since lots of json needs parsing for each request, but IIUC Emacs can't currently process the messages to/from the server while the UI thread is busy (the LSP server can do lots of work while UI is busy, but the communication is stalled until UI is done). Though it seems things will be improving there, hopefully this'll get upstreamed soon: https://www.reddit.com/r/emacs/comments/ymrkyn/async_nonbloc...