> For the complete documentation index, see [llms.txt](https://wedocs.gitbook.io/wedocs-5.1/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://wedocs.gitbook.io/wedocs-5.1/wedocs-4.6-es_es/manual-de-requisitos/processador-do-servidor.md).

# Procesador del servidor

En este tema se presentará una sugerencia de fórmula matemática para ayudar en la elección del procesador (back-end) (servidor como servicio de Windows, servidor Apache y Gestor de Tareas).

Sin embargo, destacamos la necesidad de utilizar una máquina preparada para una posible actualización del procesador.

{% hint style="info" %}
**Fórmula:** *<mark style="color:blue;">N(p) = 2 \* K(la) \* K(el) \* K(ts) \* U(max)</mark>*
{% endhint %}

A continuación, un ejemplo para atender 300 hilos (o solicitudes de WK, ya que cada solicitud crea un hilo) simultáneos (que están en ejecución al mismo tiempo). El resultado fue 16 procesadores lógicos (redondeando), lo que es atendido por 1 procesador (chip físico) de 8 núcleos (cada núcleo de los procesadores actuales tiene 2 procesadores lógicos):

{% hint style="info" %}
**15,42857143 = 2 \* 1,428571429 \* 0,9 \* 0,02 \* 300**
{% endhint %}

*<mark style="color:blue;">**N(p)**</mark>*: Número de procesadores lógicos que debemos tener en la máquina;

*2*: Cada núcleo tiene 2 procesadores lógicos no simétricos. Si tengo 2 hilos simultáneos, necesitaré 2 núcleos (siendo que cada núcleo tiene 2 procesadores lógicos) para ejecutar de forma paralela real (sin "time slicing"). Aquí intentamos paralelizar al máximo los hilos (paralelismo real);

*<mark style="color:blue;">**K(la)**</mark>*: Es el coeficiente que considera el promedio de carga (load average). Considerando ocupar solo el 70% del total de los procesadores lógicos. El 30% se destina a las tareas del SO y otros softwares instalados. Por ejemplo, un procesador con 2 núcleos y cada núcleo tiene 2 procesadores lógicos, entonces podemos ejecutar 4 hilos "en paralelo (con time slicing, es decir, no es paralelismo real)", ocupando así el 100% de los procesadores lógicos existentes en un momento determinado. En el ejemplo anterior, el valor de este coeficiente es el resultado de: 1/0,7 (que redondeando da 1.4). Por lo tanto, en el ejemplo anterior se añaden 30% más de hilos para que se tenga este margen de sobra de procesadores (30% más). Es decir, si la necesidad es de 10 procesadores, entonces multiplicamos por 1.4 para decir que necesitamos 14 procesadores. Por lo tanto, 4 procesadores quedarán sobrando para el SO y otras cosas. Así, los hilos ocuparán solo el 70% de la carga total (solo 10 procesadores);

*<mark style="color:blue;">**K(el)**</mark>*: Es el "coeficiente efectivo de carga" que considera la carga efectiva del conjunto total de hilos existentes simultáneamente (es decir, cuántos hilos estarán efectivamente exigiendo el esfuerzo del procesador en cualquier momento determinado). El servidor de WK que se ejecuta en Apache no tiene estado, es decir, una solicitud (que genera un hilo) se crea, procesa todo y se destruye. Considerando solo el servidor de WK que se ejecuta en Apache, mi coeficiente puede ser 1 (100%), lo que significa que un hilo de solicitud de WK estará siempre ejecutándose y nunca en espera. Pero, en el ejemplo anterior, suponiendo que solo el 90% (0,9 de la fórmula) de los hilos estarán de hecho consumiendo procesador todo el tiempo porque tengo los hilos generados por las conexiones del cliente Windows (que son minoría, porque el cliente HTML es el más utilizado) al servidor de WK que se ejecuta como un servicio de Windows (estos tienen estado, es decir, una conexión se realiza y permanece abierta durante todo el tiempo, exigiendo procesador solo cuando hay una solicitud de hecho). Además, existen puntos en la ejecución del código que pueden hacer que cualquier hilo entre en modo de espera, por ejemplo: Puede ser que algunos estén esperando conexión de base de datos, esperando respuesta de disco, esperando respuesta de red, esperando entrada en sección crítica (LOCKs), etc. Para entender más, este artículo puede ayudar: <https://bitismyth.wordpress.com/2012/03/13/cpu-usage-e-load-average/>;

*<mark style="color:blue;">**K(ts)**</mark>*: Para entender el significado de esta parte de la fórmula es necesaria una explicación más larga, que contenga una pequeña introducción a la arquitectura de procesadores y cómo el sistema operativo los gestiona. Esto puede encontrarse en los enlaces más abajo. Pero, un buen número que debe atender a todos los casos es 0,02;

*<mark style="color:blue;">**U(max)**</mark>*: Es la cantidad máxima de hilos (o solicitudes) que se espera que puedan existir simultáneamente. Considerando que 1 dashboard que tiene 5 indicadores, puede disparar 5 solicitudes simultáneas.

Enlaces de apoyo para mejor comprensión de esta fórmula:

{% hint style="info" %}
[<mark style="color:blue;">https://bitismyth.wordpress.com/2015/04/17/multiplas-aplicacoes-num-mesmo-servidor-ma-ideia/</mark>](https://bitismyth.wordpress.com/2015/04/17/multiplas-aplicacoes-num-mesmo-servidor-ma-ideia/)

[<mark style="color:blue;">https://en.wikipedia.org/wiki/Context\_switch</mark>](https://en.wikipedia.org/wiki/Context_switch)

[<mark style="color:blue;">https://www.devmedia.com.br/como-funciona-o-sql-server-scheduling/31972</mark>](https://www.devmedia.com.br/como-funciona-o-sql-server-scheduling/31972)

[<mark style="color:blue;">https://sites.google.com/site/proffernandosiqueiraso/aulas/8-gerencia-do-processador</mark>](https://sites.google.com/site/proffernandosiqueiraso/aulas/8-gerencia-do-processador)

[<mark style="color:blue;">https://www.akitaonrails.com/2019/03/13/akitando-43-concorrencia-e-paralelismo-parte-1-entendendo-back-end-para-iniciantes-parte-3</mark>](https://www.akitaonrails.com/2019/03/13/akitando-43-concorrencia-e-paralelismo-parte-1-entendendo-back-end-para-iniciantes-parte-3)

[<mark style="color:blue;">https://bitismyth.wordpress.com/2012/03/13/cpu-usage-e-load-average/</mark>](https://bitismyth.wordpress.com/2012/03/13/cpu-usage-e-load-average/)

[<mark style="color:blue;">https://bitismyth.wordpress.com/2015/04/17/multiplas-aplicacoes-num-mesmo-servidor-ma-ideia/</mark>](https://bitismyth.wordpress.com/2015/04/17/multiplas-aplicacoes-num-mesmo-servidor-ma-ideia/)

[<mark style="color:blue;">https://bitismyth.wordpress.com/2012/03/06/um-pequeno-teste-com-threads/</mark>](https://bitismyth.wordpress.com/2012/03/06/um-pequeno-teste-com-threads/)
{% endhint %}
