let so, there are two types of problems:
- CPU bound - the various algorithms, math, coding/decoding/encryption... in short, all that CPU.
- I/O bound - in fact when we have a lot of operations with I/o, where 90% of the tasks related to WEB and server development.
For CPU bound should use languages like C, Rust, Dlang, Go, etc. Word languages which are compiled into efficient machine code.
For I/O bound - Go, NodeJS, Erlang, Java.... Yes, in principle it does not matter what language, the main thing that used non-blocking calls and there was no lock.
There is still a queue of tasks, scaling out, etc. the Architecture and algorithms used in the system impact is often much stronger than the programming languages.
What languages are best to use for this? What not to use?
No restrictions, just common sense. That is unlikely we are going to write complex math to node.js but problems related a lot less. Also, no one says that the system needs to write strictly in one language. Now it is fashionable to use microservices, each of which can be implemented in your language and to its database, which are ideal for specific tasks.
Do not forget about the algorithms. They too must be optimal. For example, take a simple task - clustering placemarks on the map. Imagine that you have database of millions of objects that we have displayed on the map. Because to do this on the client would be problematic - we have to do it on the server and return to the client as much data as he needs.
And at these volumes, even if we took si, if our algorithm has a complexity of O(N^2) as if there is nothing particularly to do. And and so slowly. But if we take any algorithms with complexity O(NLogN) it is already possible that this algorithm can be at least in php/python/ruby to implementit. So for example I have this algorithm implemented in Java and not in the most efficient manner. Cope.
Improve the speed of development (any ruby/python/node in this plan is a good one), the cost of support (C support much more expensive than Go for example, while it is always possible to write so bad that it is easier to throw than to support), the cost of the developer.... For example to find a cheap strong developers on the Go or Rust will be very problematic.
Also do not forget that the server now are not so expensive. Sometimes in business it is easier to pay for a dozen servers than to write all the pros.
Actually the main rule of high-loaded systems - load testing and then optimization