¿Cómo se comunican los programas escritos en lenguajes distintos?
Summary
TLDREn este video, el creador explica cómo los programas escritos en diferentes lenguajes de programación se comunican entre sí, abordando temas como lenguajes compilados e interpretados, la importancia de las instrucciones máquina, y el uso de tuberías para la comunicación entre procesos. Además, profundiza en los sockets, que permiten la comunicación entre procesos en diferentes máquinas a través de una red. El video incluye ejemplos prácticos en C, Python, Java y JavaScript, y menciona su curso sobre sistemas operativos con descuento por Black Friday, ofreciendo certificados al completar los exámenes.
Takeaways
- 📚 El video busca explicar cómo se comunican programas escritos en lenguajes diferentes.
- 💻 Los lenguajes se dividen en compilados (C), interpretados (Python) y lenguajes mixtos como Java (compilado a bytecode y luego interpretado por la Máquina Virtual de Java).
- 🏗️ Todos los programas deben ser convertidos en instrucciones máquina para ser ejecutados por el procesador.
- 🔄 Los pipes permiten que la salida de un programa sea usada como entrada de otro, permitiendo la comunicación entre procesos.
- 🧩 Ejemplo práctico: un programa en C imprime números y otro en Python los recibe y los ordena, usando tuberías para conectar la salida de uno con la entrada del otro.
- 🌍 Los sockets permiten la comunicación entre procesos en diferentes máquinas, mientras que los pipes solo lo permiten en la misma máquina.
- 🔌 Los sockets pueden usarse para crear un sistema de chat simple, donde un servidor recibe mensajes de varios clientes.
- 📝 El servidor escucha en un puerto y, por cada conexión de cliente, crea un hilo para manejar la comunicación individual.
- 💡 Los clientes pueden estar escritos en diferentes lenguajes, como Python o JavaScript, y comunicarse entre sí mediante sockets.
- 🎓 El video promociona un curso sobre sistemas operativos donde se enseña más sobre la programación de procesos, hilos y tuberías.
Q & A
¿Cuál es el objetivo principal del vídeo?
-El objetivo del vídeo es explicar cómo se comunican entre sí los programas escritos en diferentes lenguajes de programación.
¿Qué lenguajes de programación se mencionan en el vídeo?
-Se mencionan C, Python y Java, explicando cómo funcionan en términos de compilación e interpretación.
¿Cuál es la diferencia entre un lenguaje compilado y uno interpretado?
-Un lenguaje compilado como C convierte el código en instrucciones máquina antes de ser ejecutado, mientras que un lenguaje interpretado como Python ejecuta el código línea por línea sin convertirlo en instrucciones máquina de antemano.
¿Cómo funciona la máquina virtual de Java (JVM) en comparación con otros lenguajes?
-Java no se compila directamente en instrucciones máquina, sino en bytecode, que es interpretado por la JVM. La JVM actúa como un intérprete de este bytecode.
¿Qué es una tubería (pipe) en sistemas operativos?
-Una tubería permite redirigir la salida de un programa como entrada de otro programa, facilitando la comunicación entre procesos en una misma máquina.
¿Cómo funciona un socket y en qué se diferencia de una tubería?
-Un socket permite la comunicación entre procesos en diferentes máquinas a través de una red. A diferencia de las tuberías, los sockets no están limitados a procesos en la misma máquina.
¿Cómo se crea un servidor de chat utilizando sockets?
-El servidor escucha conexiones en un puerto específico. Cada vez que un cliente se conecta, el servidor lo atiende creando un hilo para manejar la conexión y la comunicación.
¿Por qué los sockets son más versátiles que las tuberías?
-Los sockets permiten la comunicación entre procesos en diferentes máquinas, mientras que las tuberías solo funcionan entre procesos en la misma máquina, lo que las hace más limitadas.
¿Cuál es la limitación mencionada en el uso de tuberías para la comunicación entre programas?
-Las tuberías pueden complicarse cuando se necesita comunicar más de un proceso a la vez, ya que están diseñadas para comunicación uno a uno entre procesos.
¿Qué ejemplo práctico se muestra en el vídeo para ilustrar la comunicación entre programas?
-Se muestra un ejemplo donde un programa en C genera números y los pasa a un programa en Python que los ordena. También se utiliza un ejemplo con un servidor de chat en Java que se comunica con clientes en Python y JavaScript.
Outlines
🧐 Introducción y Propósito del Video
El presentador comienza saludando a su audiencia y menciona que el video tendrá un enfoque más didáctico, resolviendo una pregunta existencial que tenía cuando era principiante: ¿cómo se comunican los programas escritos en diferentes lenguajes? También promociona su nuevo curso de sistemas operativos, destacando que ofrece certificación y un descuento especial por Black Friday, invitando a los espectadores a aprovechar la oferta antes de que expire.
🤖 Cómo se Ejecutan los Programas en Diferentes Lenguajes
Se explica cómo los programas escritos en diferentes lenguajes se convierten en instrucciones de máquina para que el procesador pueda entenderlos. Se presentan tres ejemplos de programas en lenguajes distintos (C, Python y Java), explicando las diferencias clave entre lenguajes compilados e interpretados. El lenguaje C es compilado, Python es interpretado y Java sigue un enfoque mixto, donde se compila en bytecode y luego es interpretado por la máquina virtual de Java.
🔄 Comunicación Básica entre Programas usando Tuberías
El presentador demuestra cómo dos programas pueden comunicarse usando tuberías. Explica el concepto de pasar la salida de un programa como entrada a otro, utilizando un ejemplo práctico con un programa en C que imprime números y uno en Python que los ordena. Este mecanismo de comunicación es muy básico y limitado, lo que introduce la necesidad de mecanismos más avanzados, como los sockets.
🌐 Introducción a los Sockets para Comunicación entre Procesos
Aquí se introduce el concepto de sockets, un mecanismo más avanzado que permite la comunicación entre procesos no solo en la misma máquina, sino también entre diferentes máquinas a través de una red. Se explica que un socket es la combinación de una dirección IP y un puerto, lo que permite identificar y conectar procesos específicos en una máquina. También se muestra un ejemplo de un servidor en Java que maneja múltiples conexiones de clientes.
💻 Ejemplo de Cliente-Servidor usando Sockets
El presentador describe cómo se implementan clientes que se conectan al servidor a través de sockets, usando como ejemplo un cliente en Python y otro en JavaScript. Ambos clientes envían mensajes al servidor y reciben una confirmación de que el mensaje ha sido recibido. El presentador también menciona que hacer que los mensajes se envíen a todos los clientes sería más complejo, requiriendo programación paralela con hilos.
📦 Cierre y Recursos Adicionales
El video concluye con el presentador animando a los espectadores a probar el código por sí mismos, escribiendo más clientes y servidores siguiendo el modelo mostrado. También les recuerda que pueden encontrar el código fuente, sus redes sociales, la música usada en el video y el curso de sistemas operativos en la descripción del video.
Mindmap
Keywords
💡Lenguaje compilado
💡Lenguaje interpretado
💡Bytecode
💡Tuberías (Pipes)
💡Sockets
💡Cliente-Servidor
💡JVM (Java Virtual Machine)
💡Hilos (Threads)
💡Procesos
💡Compilador
Highlights
En este video, vamos a resolver una duda existencial sobre cómo se comunican los programas escritos en diferentes lenguajes.
Los programas escritos en cualquier lenguaje deben ser convertidos en instrucciones máquina para que el procesador las entienda.
Explicación de la diferencia entre lenguajes compilados, interpretados y lenguajes como Java que usan bytecode y la máquina virtual (JVM).
Se presenta cómo la salida de un programa puede pasarse como entrada a otro programa utilizando 'pipes' o tuberías.
Ejemplo de un programa en C que recibe números como argumentos y otro en Python que los ordena.
Demostración de cómo dos programas pueden comunicarse utilizando tuberías, mostrando la ejecución conjunta de un programa en C y uno en Python.
Introducción a los 'sockets' como un mecanismo de comunicación más avanzado que permite que procesos en diferentes máquinas se comuniquen.
Explicación de los sockets, que permiten la comunicación entre procesos en cualquier máquina conectada a una red.
Demostración de un servidor de chat sencillo en Java que escucha en un puerto y maneja conexiones de múltiples clientes usando hilos.
El servidor en Java escucha en un puerto específico y puede atender a múltiples clientes simultáneamente usando hilos.
Ejemplo de cliente en Python que se conecta al servidor de Java y envía mensajes, recibiendo confirmaciones de mensaje recibido.
Demostración de otro cliente hecho en JavaScript que se conecta al mismo servidor de chat en Java, funcionando de manera similar al cliente en Python.
Los clientes en Python y JavaScript se comunican con el servidor Java a través de sockets, intercambiando mensajes en tiempo real.
El código del servidor y los clientes está disponible para que cualquiera lo utilice o modifique.
Recordatorio del curso de sistemas operativos donde se pueden aprender más detalles sobre tuberías y programación paralela.
Transcripts
qué pasa chavales cuánto tiempo no pues
no hombre no esta vez ya no que la
semana pasada su vídeo
ah
en esta ocasión vamos a hacer un vídeo
un tanto más didáctico por así decirlo
resolviendo una especie de duda
existencial que tenía yo cuando era un
nube y no sabía nada entonces la
pregunta es la siguiente cómo hacen los
programas escritos en lenguajes
diferentes para poder comunicarse entre
sí porque vale hay muchos lenguajes hay
muchos programas pero cómo se comunican
entre sí eso es lo que vamos a tratar de
responder en los siguientes minutos pero
antes como viene siendo de costumbre
este vídeo está patrocinado por master
mind tenéis disponible mi nuevo curso de
sistemas operativos que es básicamente
un curso donde aprendemos cómo funcionan
los sistemas operativos cómo funcionan
los procesos los hilos la memoria las
tuberías etc etc
programando ente y no sólo eso sino que
esta vez tenemos una novedad podéis
obtener certificados por vuestros cursos
si al acabar el curso hacéis un pequeño
examen y sacáis más de 18 si sacáis más
de un 8 pues obtendréis vuestro
certificado y hoy día 27 black friday
tenéis un 40% de descuento aplicando el
código master black pero sólo hasta las
12 de la noche así que tenéis que ir
rapidito así que he dicho esto tenéis el
curso de sistemas operativos en
descripción ahora vamos a ponernos manos
a la obra
[Música]
bien pues para entender cómo se
comunican por así decirlo los programas
entre sí tenemos que entender antes cómo
se ejecutan estos programas para ello
tenemos que partir de la siguiente
premisa de una forma u otra todo código
de cualquier programa debe ser
convertido en instrucciones máquina
porque las instrucciones máquina es lo
único que puede entender un procesador
así que para entender esto os he
preparado aquí tres pedazos de holamun2
escritos en lenguajes diferentes el
primero de ellos es el lenguaje efe que
no es un lenguaje cualquiera es el
lenguaje vale porque es un clasicazo de
la informática entonces que tiene este
lenguaje de diferente con respecto a
java y payton pues básicamente que es un
lenguaje compilado eso significa que el
programa que compila este código lo
transformará en instrucciones máquina
que podremos ejecutar
eso se llama compilador por otro lado en
la parte de abajo está python que es un
lenguaje interpretado eso significa que
el programa que ejecuta este código no
lo transforma en instrucciones máquina
como tal sino que lo ejecuta sobre la
marcha por eso se llama interpretado
ahora bien java lo he dejado para el
final porque es un poco especial porque
no se compilan
tenéis máquina como tal y tampoco se
interpreta directamente sino que lo que
hay que hacer con el código de java es
primero compilar los bites code de java
que es código binario pero no binario
que se pueda ejecutar por el sistema
sino binario que será ejecutado por la
ley bien la llama virtual machine o
máquina virtual de java es decir en este
caso la máquina virtual actúa por así
decirlo de intérprete
igual que payton pero no de intérprete
de este código sino de este código
convertido a byte code esto es en rasgos
generales los tres tipos de lenguajes
que hay y cómo se ejecutan
y ahora que ya sabemos cómo convertir
cualquier tipo de programa en
instrucciones máquina cómo hacemos para
que dos procesos que básicamente son
programas en ejecución puedan
comunicarse datos entre sí pues si
habéis usado base o cualquier shell
sabéis que existen los payeses vale los
pipes nos sirven para la salida de
un programa y pasársela como de entrada
a otro programa por ejemplo si hago un
ls aquí vemos un listado de lo que hay
pero y si yo quiero este listado y
filtrarlo con otro programa pues yo
puedo la salida de ls y pasársela
por una tubería por ejemplo a greg y con
greg buscar sólo aquellas cadenas que
tengan la palabra hello en minúscula
entonces obtengo estos dos pues lo que
ha pasado aquí es que la salida de este
programa es la entrada este por lo tanto
hay una comunicación de aquí aquí por
eso se llama digamos tubería no porque
tiene dos zonas una para meter datos y
otra para leer vamos a ver esto con un
ejemplo propio con un programa que
hayamos hecho nosotros porque el ls y el
crêpe no los hemos hecho nosotros pero
estos programas de aquí si los podéis
copiar si queréis entonces tenemos
primero un programa en lenguaje c
lo único que hace es los
argumentos que tú le pasas y escribirlos
y por otro lado tenemos debajo un
programa escrito en python que lo que
hace es datos de la entrada e
interpretarlos como números para
ordenarlos vale porque lo he hecho así
pues ahora lo veréis vamos a ver esto
así que vamos a y vamos a compilar
el programa escrito en lenguaje zen que
como sabéis nos genera un ejecutable al
que podemos pasarle como hemos dicho
argumentos por ejemplo 5 4 3 2 1 que son
números lo único que hace este programa
es imprimir esos números pero como hemos
dicho tenemos aquí un programa que va a
números de la entrada y los va a
ordenar pues vamos a ver si es verdad
podemos la salida de este programa
que hemos ejecutado y pasarla como
entrada al otro programa que básicamente
lo que hará es ordenar veis hemos cogido
el 5 4 3 2 1 y los hemos ordenado
entonces aquí veis que están pasando
cosas un poco extrañas no primero
tenemos aquí un binario vale que le
pasamos los datos después tenemos una
tubería aquí tenemos otro programa que
ejecuta otro programa que le datos de
este otro programa es un poco raro no
pues sí es extraño pero es simple a la
vez porque lo único que hemos hecho es
una salida y pasarla como entrada
a otro programa sin más o sea da igual
que este programa necesite de otro
programa para poder ser ejecutado y no
sé qué historias porque a fin de cuentas
todo programa tiene una entrada y una
salida vamos a ver otro ejemplo más
tenemos aquí un programa escrito en java
y otro programa escrito en python este
programa hace prácticamente lo mismo que
el otro dt que hemos visto antes es
decir coge los argumentos que tú le
pasas y los imprime después tenemos el
programa de payton que lo que hará será
datos de la entrada asignarle a
cada uno un índice e imprimirlo vamos a
ver esto en acción cogemos y compilamos
el programa escrito en java vale el de
escribir mensajes punto java y el de pay
son ya sabéis que no necesitamos
compilarlo ahora ejecutamos el programa
de java y le pasamos como mensaje es
pues lo que puse yo aquí 1 2 3 y 4
ahora esto lo cogemos y se lo pasamos
como entrada al programa de payton es
decir al que lee los mensajes y ya veis
lo que hace coge cada uno de estos
mensajitos y le asigna un número sin más
pues esta es una comunicación muy muy
básica entre procesos a través de
tuberías y debido a que es muy básica
pues también es un poquito limitante no
porque qué pasa si queremos que este
programa reciba mensajes de cuatro
programas en lugar de uno solo ahí ya se
complica con tuberías se puede hacer
vale pero es mucho más complicado que
con lo que vamos a ver ahora
el siguiente mecanismo de comunicación
que proporcionan los sistemas operativos
son los sockets los sockets son bastante
más especiales que las tuberías porque
las tuberías te permiten comunicar
procesos que están en la misma máquina
en el mismo pc vale pero los sockets te
permiten comunicar procesos que están en
cualquier máquina del mundo siempre y
cuando haya una red de comunicaciones
para llegar hasta ahí o sea en principio
los sockets sirven para poder comunicar
pues dos peces entre sí no un proceso de
un pc con un proceso de otro pc a través
de una red pero es que también sirve
para comunicar procesos que están en la
misma máquina en el mismo pc entonces
vamos a ver el ejemplo que queríamos
hacer de los mensajes no queríamos tener
un programa que reciba mensajes de
muchos programas no sólo de uno como
este caso entonces que es un socket
exactamente pues un socket es la unión
entre una dirección de una máquina y un
puerto un puerto sirve para identificar
a un proceso dentro de una máquina por
ejemplo si en mi máquina hay un programa
que está escuchando en el puerto 8000
por ejemplo pues yo sé que la dirección
de mi máquina más el puerto 8000
equivale a ese programa que escucha en
ese puerto
y vamos a ver cómo sería un pequeño
servidor de chat para poder mandarle
mensajitos como hemos hecho aquí pero a
través de más programas el servidor que
tengo aquí implementado está hecho en
java pero como funciona con sockets se
puede hacer con cualquier lenguaje con
cualquiera
bien pues lo primero que tenemos aquí es
una pequeña clase que sirve de
envoltorio sobre un socket vale porque
los sockets por defecto trabajan con
bytes o sea nosotros podemos escribir
chorros de bytes ahí en un socket y leer
bytes aviv bytes a tope pero queremos
escribir cadenas de texto para que sea
más legible más fácil de entender no hay
que escribir allí
a raíz de bytes que es un poco
complicado de pensar en eso lo que hará
el servidor es escuchar en un puerto
aquí en esta máquina en mi pc no pues
entonces necesitamos darle como
argumento un puerto entonces coge ese
puerto y si es válido pues se pone a
ejecutar si no cierra el programa lo que
hacemos es básicamente ponernos a
escuchar en ese puerto y cada vez que
alguien se conecta a él pues empezamos a
atenderlo no como si fuese eso es de
toda la vida cliente servidor al el
paradigma servidor cliente pues es lo
mismo es esto
nosotros obtendremos conexiones en un
puerto y por cada conexión que llega
nueva lo que haremos es atender a ese
cliente a través de un hilo vale creamos
un hilo para poder atender a ese cliente
concreto porque puede haber varios a la
vez por lo tanto un solo hilo sólo puede
atender a un cliente así que nada
esperamos por conexiones cuando llega a
una conexión nueva ejecutamos la tarea
que se encarga de manejar esa conexión
la tarea es esta de aquí que lo único
que hace es imprimir mensajes igual que
hemos visto antes aquí solo hace eso
imprimir mensajes imprimir mensajes que
le van llegando y después le manda al
cliente un mensaje indicando que ha
recibido su mensaje sin más
eso es digamos el protocolo de
comunicaciones en este caso tenemos el
servidor tenemos el cliente el cliente
envía un mensaje al servidor el servidor
le envía un mensaje recibido y se
comunican así constantemente hasta que
el cliente envía un mensaje en en cuyo
caso ambos cierran la conexión ahora
como hacemos clientes pues podemos
hacerlo de nuevo en cualquier lenguaje
en cualquier lenguaje porque usaremos
sockets no usaremos nada específico de
ese lenguaje sino sockets que son
digamos están proporcionados por el
sistema
así que para los propósitos de este
vídeo me he hecho dos clientes uno en
python y otro en javascript entonces
vamos a examinar un poco el cliente
hecho en python después lo probaremos
para ver cómo funciona vamos a ir de
nuevo al main en este caso en lugar de
necesitar un puerto para escuchar
necesitaremos una dirección para
conectarnos y un puerto una vez todo
está correcto y estamos conectados pues
empezamos a escribir aquí mensajes le
vamos mandando a través del socket
mensajes ahí a tope toma toma toma cada
vez que mandamos un mensaje nos
esperamos a recibir el mensaje que nos
manda el servidor de recibido nos manda
una pequeña cadena que indica que ha
recibido nuestro mensaje vamos a
probarlo vamos a ver cómo funciona
entonces vamos a pasar del puerto 80 80
el 8000 80 le pasamos este puerto nos
dice que está corriendo en este puerto y
en esta máquina porque no puede correr
en otro lado evidentemente y está
esperando por conexiones pues vamos a
conectarnos a ese puerto vamos a irnos
aquí a los clientes y vamos a ejecutar
el cliente de payton para ello cogemos
el cliente y le pasamos como máquina a
donde queremos conectarnos éste
localhost y el puerto 80 80 que es el
que está escuchando nuestro servidor si
le pasamos otro puerto por ejemplo 81
ahí no hay nadie nos dirá pues no hay
ningún servidor ahí pero si le pasamos
uno correcto entonces estamos conectados
veis aquí que obtenemos una nueva
conexión el 127 001 es lo mismo que
localhost es esta máquina entonces la
conexión es desde esta máquina con lo
cual aquí escribimos nuestro nombre de
usuario como nos dice y nos dice que
escribamos un mensaje y le damos enter
para mandarlo pues vamos a poner mensaje
como veis que obtenemos aquí el mensaje
podemos ir mandando un montón de
mensajes y veis que por cada mensaje
obtenemos una cadena que nos indica que
se ha recibido y el servidor va
imprimiendo todos los mensajes que
obtiene pues bien como os he dicho
también tenemos un cliente que está
hecho en javascript el cliente es
idéntico vale es idéntico al de país y
funciona sobre de no de no es lo mismo
que payton es un intérprete pero en este
caso de javascript así que igual que
antes tenemos el servidor en java
esperando conexiones vamos a conectarnos
con paixón al puerto 80 80
vamos a javascript también y vamos
a conectarnos exactamente al mismo sitio
al puerto 80 80 vamos a poner aquí por
ejemplo antonio js como usuario y aquí
vamos a poner antonio pues página de pay
son ellos que se mandamos un mensaje un
mensaje paixón aquí lo obtenemos vamos a
mandar otro aquí mensaje javascript
aquí lo obtenemos ya está tenemos aquí
tres programas escritos en lenguajes
diferentes comunicándose perfectamente
entre sí todo esto gracias a los sockets
y ahora me diréis por qué no has hecho
que los mensajes que aparecen en el
servidor aparezcan también en cada
cliente pues porque sería más complicado
necesitamos ponernos con programación
paralela a tope para tener un hilo que
escribe mensajes y otro que lee así que
nada os dejo el código en la descripción
si queréis escribir más clientes y
queréis escribir más servidores podéis
hacerlo siguiendo exactamente el mismo
modelo que seguirá yo y os dejo también
por aquí mis redes sociales
os dejo también la música absolutamente
todo lo que se ha usado en este vídeo
del mismo modo recuerdo que tenéis el
curso de sistemas operativos en la
descripción si queréis profundizar en
tuberías vais a programar tuberías
manualmente con 'the así que nada no
tenéis todos los enlaces en la
descripción y nos vemos en el próximo
vídeo
Ver Más Videos Relacionados
PROGRAMACIÓN DESDE 0 || LENGUAJES DE PROGRAMACIÓN Y SUS TIPOS || TEORÍA
Programación 1.4 Tipos de lenguajes de programación
Tipos de lenguajes de programacion
HISTORIA Y EVOLUCIÓN DE LOS LENGUAJES DE PROGRAMACIÓN
5. Programación desde Cero | Algoritmos y Programación | Lenguaje de programación (parte 2)
Sistemas Operativos ¿Que es? Caracteristicas, tipos, funcion, TODO sobre S.O.
5.0 / 5 (0 votes)