Alta concurrencia en Java

Cuando nos enfrentamos a aplicaciones con una alta concurrencia, solemos encontrarnos con una serie de problemas tipo. En este artículo me centraré en los problemas de recursos (cpu y memoria), dejando los problemas de sincronización para otro futuro artículo. De momento me centraré en los problemas más típicos y sus soluciones más directas.

Cuando descubrimos los hilos y las ventajas del procesamiento en paralelo puede ocurrir que acabemos abusando de su uso. Si el problema es que tenemos una gran cantidad de hilos (¿100? ¿1000?) simultáneos, el procesador estará saltando de uno a otro sin parar, sin dejar que realmente terminen, por muy corta que sea su ejecución real. Y con el tiempo se irán encolando más y más hilos que sólo ralentizarán el proceso. A eso hay que sumarle que el coste de crear y destruir hilos puede llegar a ser significativo cuando hablamos de tantos hilos a la vez.
When facing high concurrency applications, we often find a number of generic problems. In this article I will focus on the problems of resources (CPU and memory), allowing synchronization problems for another future article. For now on, I will focus on the most typical and most direct solutions.

When we discover threads and the advantages of parallel processing it can happen that we end up abusing their use. We have a lot of threads (100 ¿? 1000?) simultaneously, and the processor will be jumping from one to another without stopping, not letting them finish, no matter how fast is their real excution. And over time there will be more and more threads only slowing down the process. To the cost of execution of each thread, we must consider also the added cost of creating and destroying threads, which can become significant when we talk about so many threads at once.
Continúa leyendo Alta concurrencia en Java