Ir al contenido principal

Joe Armstrong on Erlang


Erlang es un lenguaje de programación semifuncional que posee una estructura dinámica, permite dar asignaciones únicas a variables, y de acuerdo a su definición, es tolerante a fallas, así como posee una característica que es de suma importancia para este blog, es que tiene incorporado el soporte para trabajos concurrentes.
En entradas anteriores hablábamos del cambio de paradigma, que es algo que de hecho hemos insistido hasta el cansancio en casi todas las entradas, pues el reto ya no es conseguir el hardware capaz de trabajar con multiprocesamiento, o en el caso de Erlang, concurrencia, y este lenguaje de programación es un acercamiento bastante acertado al mundo del paralelismo; sin embargo, paralelismo y concurrencia no son inherentemente lo mismo.
A pesar de que hablamos de conceptos algo distintos, el interés es muy similar pues la concurrencia nos ha ayudado a alcanzar algo así como “un paralelismo falso”. Podemos explicarlo de la manera más sencilla retomando una tecnología que probablemente utilizamos pero que puede que no seamos conscientes de hacerlo, esta es el “HyperThreading”, en este caso una tecnología de Intel que tiene diferentes nombres en la competencia pero que funciona igual en todas las plataformas, todos estos conceptos nos llevan a una premisa muy cierta acerca del HyperThreading y la concurrencia, pues no podemos aprovechar el paralelismo al 100% mientras nos perdemos de la concurrencia.

Gracias al paralelismo tenemos más procesadores a nuestra disposición, pero la concurrencia ayuda a aprovechar mejor este potencial, pues si reducimos el tiempo en el que esperamos a que un procesador termine una tarea y le damos otra para que pase la menor cantidad de tiempo muerto, podemos concluir que una gran parte de la optimización de procesos, se logra trabajando de manera más inteligente, para crear sistemas que sean mucho más reactivos y completos, y este es el paradigma del que poco a poco hemos partido hasta alcanzar lo que tenemos hoy en día en lo que respecta a programación paralelizable.

Comentarios

Entradas más populares de este blog

Silicon Valley

Las computadoras como las conocemos, han recorrido un camino muy largo e interesante desde que la necesidad trabajar con más información se volvió una prioridad para la ciencia, la guerra y la economía, es por eso que el transistor marcó la diferencia de una era en el ramo computacional ya que cambió por completo la industria electrónica. Su concepto implicaba una gran mejora en cuanto a los dispositivos utilizados manejar estados lógicos en circuitos electrónicos, ya que miniaturizaba diversos componentes electrónicos en uno solo haciendo posible la creación de dispositivos más complejos, mismos que hicieron posible llevar a cabo el primer alunizaje. La pasión por la ciencia, motivada por la revolución de hacer la vida de las personas cada vez mejor, es el incentivo adecuado (además del dinero) que llevó a un grupo de científicos a desarrollar la tecnología necesaria bajo el nombre de “FairChild Semiconductor”, hoy “Intel”, después de diversos conflictos de intereses y grandes pol...

Teaching Concurrency with Erlang

Como presentamos anteriormente en la entrada correspondiente a Erlang, nos queda claro que el Paralelismo aunque es diferente a la concurrencia, ambos nos ayudan a alcanzar nuestro deseado objetivo de tener un paradigma de desarrollo de software más enfocado al aprovechamiento de recursos listos para multiproceso. A medida que la tecnología avanza, el interés por hacer programas Concurency-Oriented incrementa debido a que cada vez se integra tecnología más compleja y completa que satisface diversas necesidades que han surgido con el tiempo, así como la miniaturización, la eficiencia y por supuesto la potencia. Actualmente tenemos procesadores que tienen al menos dos núcleos, y gracias a un poco de astucia mercantil e ingenieril, podemos decir que ambos núcleos se pueden sentir como cuatro. Así mismo contamos con teléfonos móviles que cuentan con hasta 8 núcleos y tienen arquitecturas interesantes como BIGlittle; sin embargo esta necesidad por “tirar más núcleos al problema”...

The State of Parallel Programming

Anteriormente hemos hablado del gran reto de cambiar el paradigma del desarrollo del software, pues este ha logrado mantenerse al grado de que la misma comunidad que lo mantiene fue poco a poco integrando algunos elementos del paralelismo, y a pesar de esto el “mindset” que se requiere para paralelizar procesos durante el desarrollo no se encuentra normalizado. Tal como el caso de los lenguajes de programación más populares, buscando la forma de ofrecer las funciones más actuales. No obstante, al paralelizar con estas herramientas no soluciona el principal problema, de lo que el cambio de paradigma refiere. Según UBM TechWeb, necesitamos más y mejores herramientas para paralelizar tareas en especial cuando nos involucramos con código lo suficientemente complejo como para necesitar debuggeo intensivo, pues muchas veces podemos recaer en paralelización incorrecta, incluso aunque las estadísticas nos digan que un buen número de programadores están familiarizados con...