If you can have one thread per transaction then you can avoid event loops. If you cannot then you will need to write an event loop. In the systems I work with, the transactions are long held (months) and high in number (millions). Unless we went with a language that had lightweight threads we have to use event polling. Rewriting in Erlang would come with different problems...
There are architectural benefits to event loops too. You get built in interception and if your code is free of side effects cheaper redundancy.
There are architectural benefits to event loops too. You get built in interception and if your code is free of side effects cheaper redundancy.