elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Entrar al Canal Oficial Telegram de elhacker.net


+  Foro de elhacker.net
|-+  Foros Generales
| |-+  Foro Libre
| | |-+  Nuevos lenguajes de programación para antiguas preguntas
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Nuevos lenguajes de programación para antiguas preguntas  (Leído 721 veces)
ecarisio

Desconectado Desconectado

Mensajes: 1


Ver Perfil
Nuevos lenguajes de programación para antiguas preguntas
« en: 20 Octubre 2014, 14:09 pm »

http://www.muycomputerpro.com/2014/10/09/nuevos-lenguajes-de-programacion-para-antiguas-preguntas

¿Por qué es necesario usar un semáforo para que un barbero atienda bien a sus clientes? Y, ¿Cómo pueden unos filósofos sentados frente a unos platos de fideos morirse de hambre? Estas preguntas a primera vista pueden parecer sin sentido, pero ocuparon las mentes de los primeros computer scientist en la segunda mitad del siglo XX.

Uno de ellos en particular  (el holandés Edsger Wybe Dijkstra)  formuló una serie de problemas en forma de ejercicios prácticos para ilustrar las cuestiones ligadas a la sincronización de múltiples procesos activos al mismo tiempo y a la comunicación entre ellos. Así nacieron el problema del barbero durmiente y el problema de la cena de los filósofos.

En el primer problema, hay que gestionar la cola de clientes que esperan sentarse en el sillón para ser afeitados por un barbero, que se duerme cuando no tiene clientes. En el segundo problema, el recurso compartido son los palillos chinos que cada filósofo sentado a una mesa tiene a su derecha y a izquierda y que comparte con los demás filósofos para poder comer su plato de fideos.

Ambas situaciones se ven afectadas por los problemas críticos de la programación concurrente y de los modernos sistemas operativos multitasking:

  •     Race condition: situación en la cual múltiples procesos se encuentran en condición de competición para la utilización de un mismo recurso. Por ejemplo, cuando todos nuestros filósofos intentan a tomar el mismo palillo a la vez. O cuando dos clientes de nuestro barbero intentan ocupar la misma silla de la sala de espera.
        Deadlock: situación de bloqueo permanente que surge cuando dos o más procesos necesitan de recursos ocupados por los demás para avanzar. Por ejemplo, cuando nuestros filósofos toman al mismo tiempo los palillos a sus derechas y se quedan esperando eternamente a que alguien libere los a sus izquierdas. O cuando nuestro barbero acaba con un cliente y al mismo tiempo llega el cliente siguiente: el barbero se duerme eternamente creyendo que no hay más clientes y el cliente se queda esperando eternamente a que el barbero acabe con un cliente que no existe.
        Starvation: situación similar al deadlock, pero en la cual uno o más procesos están esperando recursos ocupados por otros procesos que no se encuentran necesariamente parados. Por ejemplo, cuando no se distribuyen de forma homogénea los turnos entre los filósofos o los clientes del barbero, de forma que antes o después algún proceso se “muera de hambre” (o le crezca una barba muy larga).

Para solucionar estas situaciones anómalas, se han ideado a diferentes técnicas:

  •     Mutex, o algoritmos de exclusión mutua, que se usan en programación concurrente para evitar que más de un proceso a la vez  ingreses en secciones críticas.
        Semáforos, variables especiales utilizadas para restringir o permitir el acceso de un proceso a recursos compartidos. Según el valor que asumen permiten a más o menos procesos utilizar el recurso de forma simultánea.
        Aging, una técnica de scheduling que gradualmente incrementa la prioridad de un proceso basándose en cantidad de tiempo que lleva esperando en la cola.

Aunque los problemas de la programación concurrente y las técnicas para solucionarlos puedan parecer antiguos, recientemente han vuelto de actualidad debido a la necesidad de la nueva era de la computación, como la escalabilidad en el procesamiento de importantes cantidades de datos.

Para ello, han surgido nuevos lenguajes de programación, como y GO. Scala, acrónimo de scalable language, fue introducido en 2003 y permite manejar programas pequeños o aplicaciones a muy gran escala, optimizando el código para trabajar con la concurrencia. Go, lenguaje de programación inicialmente desarrollado por Google en 2007, es un lenguaje diseñado de forma particular para el cloud y la concurrencia.
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Existen Lenguajes de programacion Visual para Linux? « 1 2 »
Programación General
Lainuxxx 10 6,600 Último mensaje 21 Febrero 2013, 19:50 pm
por z3nth10n
¿Lenguajes de programación para una Red-Social? « 1 2 »
Desarrollo Web
Adrisim 10 21,489 Último mensaje 1 Junio 2011, 03:15 am
por Lunfardo
Lenguajes de programación para Hackear
Hacking
abi-ds 3 3,716 Último mensaje 25 Febrero 2013, 15:30 pm
por andres98
Diez lenguajes de programación para partirse la caja pero que funcionan ...
Noticias
wolfbcn 0 821 Último mensaje 16 Junio 2015, 21:50 pm
por wolfbcn
Lenguajes de programación para iniciarse? « 1 2 »
Scripting
hckcrck 19 9,857 Último mensaje 1 Julio 2016, 02:31 am
por peter_lyon
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines