miércoles, 25 de enero de 2017

The Free Lunch Is Over

Hoy voy a hablar sobre el artículo: "The free lunch is over: A fundamental turn toward concurrency in software" por Herb Sutter.

Pero antes, empecemos con la canción para esta entrada, será "Vidas Paralelas" de Ximena Sariñana.


The free lunch se refiere a la vieja práctica en la que los desarolladores, sabiendo que cada dos años se duplicaba la capacidad de procesamiento de las computadoras podían ser relativamente irresponsables al momento de implementar una solución, con la confianza de que en máximo dos años (al terminar el desarollo de la aplicación). Las computadoras comunes serían capaces de ejecutarlo sin problemas.

El problema es que antes del 2005 la ley de Moore ya no aplica del todo con procesadores actuales, la velocidad base de un procesador se ha estancado alrededor de 3.0 Ghz. Lo que los fabricantes de hardware han hecho para compensar esto (además de optimizaciones y arquitecturas macabras, sí, estoy hablando de ti, Cannonlake) es agregar núcleos y hyperthreads, esto implica que los desarrolladores, si quieren realmente aumentar el rendimiento de sus aplicaciones deben tomar en cuenta las siguientes cosas:

Tener disponibles más núcleos no duplica (o cuatriplica) la velocidad de un proceso, en primera, porque agrega overhead que es el tiempo que tarda en que ambos núcleos se coordinen, en segunda, si una aplicación no soporta programación multinúcleo, su tiempo de ejecución va a ser similar en una computadora que tenga 1, 2, 4 u 8 núcleos. Sin embargo, si la aplicación ocupa un 100% del procesador, un usuario con más núcleos va a sentir su computadora más fluida, al poder usar los demás núcleos para otras tareas (cómo abrir Facebook, escuchar la nueva canción de Justin Bieber o leer mi último post) mientras la tarea se ejecuta.

Sin embargo, cualquier aplicación que esté diseñada para obtener el máximo rendimiento de una computadora (sí, ahora estoy hablando de ti, No Man's Sky). Debe estar diseñada y programada para soportar concurrencia.

Esto también implica una revolución en lenguajes de programación, ya que éstos deben estar diseñados para soportar concurrencia de una forma lo más simple posible para el desarrollador sí, ahora estoy hablando de lenguajes que no soportan programación multinúcleo sin llamar a otro low level language como C, haciendo prácticamente inútil haber utilizado al lenguaje de alto nivel desde un principio (LUA).

Es por ello que el futuro aparenta ser lenguajes funcionales, ya que por su naturaleza no necesitan utilizar locks para evitar corromper la información, hablo de lenguajes como Clojure o cualquier dialecto de Lisp, Perl, o Elixir.

Como el artículo lo menciona, la programación multinúcleo es para los desarrolladores actuales el equivalente a la programación orientada a objetos, ya que aprovechará mejor los cambios en hardware de las computadores de los últimos 15 años.

Eso es todo por esta entrada, espero haya sido una lectura agradable.

Wololo.

No hay comentarios:

Publicar un comentario