Qu茅 es el asincronismo

2/26
Recursos

Aportes 91

Preguntas 8

Ordenar por:

驴Quieres ver m谩s aportes, preguntas y respuestas de la comunidad?

馃す馃徎鈥嶁檧锔 Clase #2: Qu茅 es el asincronismo 2/21 馃す馃従鈥嶁檪锔
.
鉁嶐煆 Conceptos importantes para entender el asincronismo:
.
鈥 馃У Thread: Thread para Javascript permite realizar programaci贸n multihilos en este entorno. En realidad, simula la creaci贸n y ejecuci贸n de hilos, pero para el desarrollador es lo mismo. 脡sto simplifica much铆simo la creaci贸n de aplicaciones Javascript.
鈥 馃毇 Bloqueante: Una llamada u operaci贸n bloqueante no devuelve el control a la aplicaci贸n hasta que se ha completado. Por tanto el thread queda bloqueado en estado de espera.
鈥 馃毧 No bloqueante: Una tarea no bloqueante se devuelve inmediatamente con independencia del resultado. Si se complet贸, devuelve los datos. Si no, un error.
鈥 馃帪锔 S铆ncrono: Las tareas se ejecutan de forma secuencial, se debe esperar a que se complete para continuar con la siguiente tarea.
鈥 馃殾 As铆ncrono: Las tareas pueden ser realizadas m谩s tarde, lo que hace posible que una respuesta sea procesada en diferido. La finalizaci贸n de la operaci贸n I/O (entrada/salida) se se帽aliza m谩s tarde, mediante un mecanismo espec铆fico como por ejemplo un callback, una promesa o un evento, lo que hace posible que la respuesta sea procesada en diferido.
鈥 馃洡锔 Paralelismo: El paralelismo es la ejecuci贸n simult谩nea de dos o m谩s tareas. Algunas tareas se pueden dividir en partes m谩s peque帽as que pueden ser resueltas simult谩neamente.
鈥 馃幃 Concurrencia: La concurrencia es la capacidad de un algoritmo o programa para ejecutar m谩s de una tarea a la vez. El concepto es similar al procesamiento paralelo, pero con la posibilidad de que muchos trabajos independientes hagan diferentes cosas a la vez en lugar de ejecutar el mismo trabajo.
鈥 馃寑 Eventloop o Loop de eventos: El bucle de eventos es un patr贸n de dise帽o que espera y distribuye eventos o mensajes en un programa.
.
馃摑 Formas de manejar la asincron铆a en JavaScript:
.
鈥 馃摡 Callbacks: Una funci贸n que se pasa como argumento de otra funci贸n y que ser谩 invocada.
鈥 馃馃徏鈥嶐煫拆煆 Promesas: (implementado en ES6) Una promesa es una funci贸n no-bloqueante y as铆ncrona la cual puede retornar un valor ahora, en el futuro o nunca.
鈥 馃洠锔 Async / Await: (implementado en ES2017) Permite estructurar una funci贸n asincr贸nica sin bloqueo de una manera similar a una funci贸n sincr贸nica ordinaria.
.
馃搶 En JavaScript casi todas las operaciones de I/O (Entrada y Salida) no se bloquean. A esto se le conoce como as铆ncronismo. Lo 煤nico que no es procesado antes de que termine la operaci贸n son los callbacks, ya que 茅stos est谩n amarrados a una operaci贸n y esperan a que sea finalizada para poder ejecutarse.
.
El asincronismo es una manera de aprovechar el tiempo y los recursos de la aplicaci贸n, ejecutando tareas y procesos mientras otros son resueltos en background (como la llegada de la informaci贸n de una API), para posteriormente continuar con las tareas que requer铆an esa informaci贸n que no ten铆as de manera instant谩nea.
.
鈴诧笍 Un ejemplo f谩cil de asincronismo vs sincronismo es invitar a unos amigos a una fiesta y ofrecer una parrillada. Primero decides colocar la carne y verduras a la parrilla y luego repartir bebidas y algo para picar (snacks). Si fuera una persona s铆ncrona (Blocking) tendr铆as que esperar a que la comida de la parrilla est茅 cocinada y luego atender a los invitados. Pero si fuera una persona as铆ncrona (Non Blocking) luego de poner la carne al carb贸n, sacas las bebidas fr铆as de la nevera y compartes con los invitados mientras se cocina la carne. La acci贸n de que la comida en la parrillada est茅 lista ser铆a un callback que est谩 esperando que finalice el proceso para ejecutarse. Pero otros procesos (como compartir la velada con bebidas y algo de picar) ya podr铆an irse realizando.

Cuando preguntan si JavaScript es multi-hilo y as铆ncrono

Esta clase es Oro para entender de forma muy facil el asincronismo

https://platzi.com/clases/1798-javascript-navegador/26016-asincronia/

El profe da la clase como si estuviera diciendo un poema. Utiliza la pausa para atraer la atencion de la audencia, nos sorprende con enfasis cada vez que quiere remarcar algo鈥
Solo hizo falta la rima

Tengo que decirlo, porque fui uno de los que constructivamente, dejaba mensajes para que nuestro Profesor Oscar mejorar谩 varios aspectos para la ense帽anza y que nosotros como estudiantes aprendi茅ramos mejor y m谩s si reci茅n comenz谩bamos. Hoy volviendo a ver estos cursos, felicito primero al profesional y persona que se preocupa por la mejora constante, tengo que reconocer el crecimiento del profe y agradecer su ense帽anza, voy por su segundo curso y ya denoto un cambio muy positivo que ayuda mucho a nosotros los estudiantes. Gracias tambi茅n al equipo platzi por tener en cuenta ese feedback que uno trata de aportar de la mejor manera.

Definici贸n de asincronismo

Es una manera de aprovechar el tiempo y recursos de nuestra aplicaci贸n, ejecutando tareas y procesos mientras otros son resueltos en segundo plano.

驴En qu茅 formas JS puede manejar la asincron铆a?

  • Callbacks:

    Una funci贸n que se pasa como argumento de otra funci贸n y que ser谩 invocada seg煤n sea su necesidad.

  • Promesas (ES6):

    Funci贸n no-bloqueante y as铆ncrona la cual puede retornar un valor ahora, en el futuro o nunca.

  • Async / Await (ES2017)

    Permite estructurar una funci贸n asincr贸nica sin bloqueo de una manera similar a una funci贸n sincr贸nica ordinaria.

Estos 3 conceptos son con los que m谩s se trabajan dentro del asincronismo.

Una clase de apoyo a esta gran clase que dio Oscar.

Por si una clase de apoyo te fue poco, te dejo una segunda

El asincronismo es b谩sicamente una manera de aprovechar el tiempo y los recursos de nuestra aplicaci贸n, ejecutando tareas y procesos mientras otros son resueltos en background (como la llegada de la informaci贸n de una API), para posteriormente continuar con las tareas que requer铆an esa informaci贸n que no ten铆as de manera instant谩nea.

Un ejemplo f谩cil es comparando asincronismo vs sincronismo: En lenguajes s铆ncronos al hacer un temporizador para ejecutar una funci贸n, todo el c贸digo se pausa hasta terminar el tiempo, mientras que en Javascript u otros lenguajes as铆ncronos, podemos estar aprovechando ese tiempo para ejecutar otros procesos hasta que ese tiempo finaliza.

GLOSARIO

API
Interfaz de programaci贸n de aplicaciones (Application Programming Interface). Es un conjunto de
rutinas que provee acceso a funciones de un determinado software.
Concurrencia
Cuando dos o m谩s tareas progresan simult谩neamente.
Paralelismo
Cuando dos o m谩s tareas se ejecutan, literalmente, a la vez, en el mismo instante de tiempo.
Bloqueante
Una llamada u operaci贸n bloqueante no devuelve el control a nuestra aplicaci贸n hasta que se ha
completado. Por tanto el thread queda bloqueado en estado de espera.
S铆ncrono
Es frecuente emplear 鈥榖loqueante鈥 y 鈥榮铆ncrono鈥 como sin贸nimos, dando a entender que toda la
operaci贸n de entrada/salida se ejecuta de forma secuencial y, por tanto, debemos esperar a que
se complete para procesar el resultado.
As铆ncrono
La finalizaci贸n de la operaci贸n I/O se se帽aliza m谩s tarde, mediante un mecanismo espec铆fico
como por ejemplo un callback, una promesa o un evento, lo que hace posible que la respuesta
sea procesada en diferido.
Call Stack
La pila de llamadas, se encarga de albergar las instrucciones que deben ejecutarse. Nos indica en
que punto del programa estamos, por donde vamos.
Heap
Regi贸n de memoria libre, normalmente de gran tama帽o, dedicada al alojamiento din谩mico de
objetos. Es compartida por todo el programa y controlada por un recolector de basura que se
encarga de liberar aquello que no se necesita.
Cola o Queue
Cada vez que nuestro programa recibe una notificaci贸n del exterior o de otro contexto distinto al
de la aplicaci贸n, el mensaje se inserta en una cola de mensajes pendientes y se registra su
callback correspondiente.
Eventloop o Loop de eventos
Cuando la pila de llamadas (call stack) se vac铆a, es decir, no hay nada m谩s que ejecutar, se
procesan los mensajes de la cola. Con cada 鈥榯ick鈥 del bucle de eventos, se procesa un nuevo
mensaje.
Hoisting
Sugiere que las declaraciones de variables y funciones son f铆sicamente movidas al comienzo del
c贸digo en tiempo de compilaci贸n.
DOM
DOM permite acceder y manipular las p谩ginas XHTML como si fueran documentos XML. De
hecho, DOM se dise帽贸 originalmente para manipular de forma sencilla los documentos XML.
XML
Lenguaje de marcado creado para la transferencia de informaci贸n, legible tanto para seres
humanos como para aplicaciones inform谩ticas, y basado en una sencillez extrema y una r铆gida
sintaxis. As铆 como el HTML estaba basado y era un subconjunto de SGML, la reformulaci贸n del
primero bajo la sintaxis de XML dio lugar al XHTML; XHTML es, por tanto, un subconjunto de
XML.
Events
Comportamientos del usuario que interact煤a con una p谩gina que pueden detectarse para lanzar
una acci贸n, como por ejemplo que el usuario haga click en un elemento (onclick), que elija una
opci贸n de un desplegable (onselect), que pase el rat贸n sobre un objeto (onmouseover), etc.
Compilar
Compilar es generar c贸digo ejecutable por una m谩quina, que puede ser f铆sica o abstracta como
la m谩quina virtual de Java.
Transpilar
Transpilar es generar a partir de c贸digo en un lenguaje c贸digo en otro lenguaje. Es decir, un
programa produce otro programa en otro lenguaje cuyo comportamiento es el mismo que el
original.

		**Qu茅 es el asincronismo**
  1. Asincronismo
    Esto significa que tienen que ejecutarse tarea por tarea y en el transcurso de la evoluci贸n de las tecnolog铆as hemos implementado ya sea conceptos librer铆as y recursos que le a帽aden a estos lenguajes de programaci贸n el poder de trabajar con el asincronismo y en este caso lo tenemos dentro de JS.

  2. JavaScript se define
    Como un lenguaje de programaci贸n sincrono por defecto y que sola mente utiliza un sub proceso un solo hilo para trabajar.

  3. JavaScript
    es s铆ncrono y no bloquean, con un bucle de eventos (concurrencia),
    implementando con un 煤nico hilo para sus interfaces de I/O.
    (entrada y salida)

  4. JavaScript es single-threaded (un solo hilo)
    A煤n con m煤ltiples procesadores en tu computadora, JavaScript sigue proces谩ndolo en una sola tarea o en un solo hilo, llamado el hilo principal.

  5. Bloqueante
    Una tarea no devuelve el control hasta que se ha completado.
    路 significa que una tarea no devuelve el control de la implementaci贸n o de la l贸gica que estes haciendo hasta que se a completado, por lo tanto una tarea puede llegar para ser bloqueada.

  6. No bloquean:
    Una tarea se devuelve inmediatamente (el control) con independencia del resultado.
    Si se complet贸, devuelve los datos.
    Si no, un error.

  7. S铆ncrono
    Las tareas se ejecutan de forma secuencia, se debe esperar a que se complete para continuar con la siguiente tarea.

  8. As铆ncrono
    Las tareas pueden ser realizadas mas tarde, lo que hace posible que la respuesta pueda ser diferida y con esto poder continuar, avanzar hacer otras tareas y gradualmente obtener la informaci贸n que deseamos.

  9. Concurrencia en JavaScript
    Para eso utiliza un modelo de concurrencia basado en eventos mejor conocido como event 鈥渓oop鈥

  10. EventLoop
    El bucle de eventos que no es mas que un patr贸n de dise帽o que espera y distribuye eventos o mensajes en un programa segun sea el caso.

    Dentro de el lenguaje de programaci贸n tenemos Callbacks

  11. Callbacks
    Una funcion que es basada como un argumento de otra funci贸n y que sera invocada segun sea la nececidad.

  12. Promesas鈥 (ES6)
    Son funciones no-bloqueantes que trabajan con la asincr贸nica y con lo cual va a cumplir como su nombre lo dice una promesa
    la cual puede retornar un valor ahora, en el futuro o nunca.

  13. Async / Await鈥 (ES2017)
    Nos va a permitir estructurar una funci贸n as铆ncronica sin bloqueo de una manera similar a una funci贸n sincr贸nica ordinaria y con esto a帽adimos una forma de utilizar sintaxis mas amigable, entendible, f谩cil de trabajar sin tener que recurrir a problemas particulares que nos daban los colebars los cuales original mente enpesabamos a tener las soluciones a este problema de el asincronismo.

  14. JavaScript
    acaba de convertirse en Multi-Threaded con la capacidad de realizar m煤ltiples tareas simult谩neamente. El concepto como tal de como fue conseguido es sincrono, pero tenemos herramientas que nos ayudan a trabajar con la asincr贸nica dentro de lo que vendr铆a siendo nuestro proyecto.

  15. JavaScript es
    As铆ncrono y no bloqueante, con un bucle de eventos (concurrencia)
    implementando con un 煤nico hilo para sus interfaces de I/O (entrada y salida).

  16. Definici贸n de asincronismo
    Es una manera de aprovechar el tiempo y recursos de nuestra aplicaci贸n, ejecutando tareas y procesos mientras otros son resueltos en segundo plano.

La asincronia del trabajo remoto me trajo hasta aqui xD

conclusi贸n: JavaScript ha evolucionado la forma en que agiliza la realizaci贸n de tareas. En sus inicios se concibi贸 de modo s铆ncrono, pero han surgido mejoras sustanciales que permiten ser un lenguaje de programaci贸n as铆ncrono, no bloqueante, que est谩 definido por el EventLoop, que se encarga de distribuir las tareas en un 煤nico hilo en el input y output de la interfaz de usuario.

Wow me encanta este nuevo Oscar, ha mejorado un mont贸n pedag贸gicamente

Jajajajaja y la respuesta final es NO :V

En buena hora Platzi actualiz贸 su curso, me parece muy bueno, toma m谩s temas y se explaya mucho m谩s, 隆excelente!

La concurrencia en Javascript. En este video podemos ver en profundidad como funciona el EventLoop de Javascript: https://youtu.be/h1P2vmquFMA B谩sicamente tendremos un call Stack d贸nde almacenaremos todo el c贸digo de nuestro script, es decir todo los que tenemos en nuestro scope global. Luego vamos a ir ejecutando las instrucciones en un orden LIFO (por eso se llama Stack). Aquellas operaciones que impliquen un orden de procesamiento diferido o as铆ncrono, como las que implican setTimeout o setInterval ser谩n administradas por la API del tiempo o timbre API alimentando el Callback Queue que es una cola FIFO d贸nde ser谩n almacenando los bloques de c贸digo que deban ser llamados de forma as铆ncrona. Estos bloques de c贸digo se ir谩n poniendo en el Call Stack cu谩ndo este est茅 vac铆o.

Caracter铆stica no bloqueante de Javascript. Esta caracter铆stica hace referencia a una capacidad as铆ncrona de trabajo en la que sin importar se ejecute o no correctamente permite al c贸digo continuar, mostrando un resultado esperado o un error dado el caso.

  • Asincronismo en JavaScript

    Los lenguajes de programaci贸n por s铆 mismos son s铆ncronos, deben ejecutarse tarea por tarea y se les ha implementado con el tiempo librer铆as o nuevos recursos para poder trabajar con el asincronismo.

    JS es un lenguaje de programaci贸n s铆ncrono por defecto y que solamente utiliza un subproceso, un solo hilo.

    JavaScript es single-threaded. A煤n con m煤ltiples procesadores, solo puede ejecutar tareas en un solo hilo.

  • Conceptos a considerar en JavaScript:

    JS es s铆ncrono y no bloqueante, con un bucle de eventos (concurrencia), implementado con un 煤nico hilo para sus interfaces de I/O (input/output).

    • Bloqueante: una tarea no devuelve el control de la implementaci贸n o la l贸gica hasta que se ha completado.
    • No bloqueante: una tarea devuelve inmediatamente el control para poder continuar sin necesidad de detener nuestra aplicaci贸n, ya sea devolviendo los datos o manejando errores.
    • S铆ncrono: las tareas se ejecutiva de forma secuencial, deben esperar a que se completen para continuar con la siguiente tarea.
    • As铆ncrono: las tareas pueden ser realizadas m谩s tarde, lo que hace posible que la respuesta pueda ser diferida y avanzar en otras tareas para obtener la informaci贸n que deseamos despu茅s.
    • Concurrencia en JS: utiliza un modelo de concurrencia basado en eventos o 鈥渆vent loop鈥.
    • EventLoop: el bucle de eventos que no es m谩s que un patr贸n de dise帽o que espera y distribuye los eventos seg煤n sea el caso.
  • Formas de manejar la asincron铆a en JavaScript:

    • Callbacks: funci贸n que es pasada como argumento de otra funci贸n y que ser谩 invocada seg煤n sea la necesidad.
    • Promesas (ES6): funci贸n no-bloqueante y as铆ncrona la cual puede retornar un valor ahora, en el futuro o nunca.
    • Async / Await: permite estructurar una funci贸n as铆ncrona sin bloqueo de una manera similar a una funci贸n s铆ncrona ordinaria.

    Con las herramientas para manejar la asincron铆a en JavaScript, podr铆amos definir que JS es: as铆ncrono y no bloqueante, con un bucle de eventos (concurrencia) implementado con un 煤nico hilo para sus interfaces I/O.

Es crucial que en la escuela de javaSript agreguen el curso de EngineV8 y el navegador por Diego de Granda, antes incluso que el de Ecmascript, es inentendible lo que pasa sino, se los recomiendo con amor

Gracias a las herramientas a帽adidas a JavaScript es que podemos decir esto:

<aside>
馃挕 JavaScript es un lenguaje multihilo con capacidad de realizar tareas simult谩neamente.

</aside>

No obstante, cabe recalcar que JavaScript se concibi贸 como s铆ncrono y de un solo hilo, son las herramientas las que dieron la definici贸n anterior.

Con muchas ganas de aprender asincronismo de mano del profe Oscar

Ejecucion en Parallel vs Concurrency
.
Un **cpu ** es una parte f铆sica del computador que ejecuta el software (nuestro c贸digo), para simplificar un poco el cpu ejecuta una instrucci贸n a la vez.
.
Una tarea esta compuesta de una o m谩s instrucciones.
.

  • En ejecuciones en Parallel cada tarea es ejecutada en su propio cpu. As铆 cada cpu ejecuta su conjunto de instrucciones dentro de la Tarea asignada.
    Tarea_1 鈥> cpu_1
    Tarea_2 鈥> cpu_2

.

  • En ejecuciones en Concurrency es una ilusi贸n de ser ejecutadas en Parallel pero lo que hacer es compartir el mismo cpu, para ejecutar dos o mas tareas a la vez. As铆 el cpu_1 ejecuta alternando entre las instrucciones de la Tarea_1 y la Tarea_2.
    Tarea_1 --_
    . . . . . . . . _ 鈥> cpu_1
    Tarea_2 鈥

.
.
.
.
Si me equivoque en algo o puedes ayudarme con feedback, te lo agradezco mucho si dejas una respuesta a este aporte 馃槃.

Recuerden鈥

JavaScript es un lenguaje as铆ncrono de concurrencia y no bloqueante, esto porque nuestro espacio de ejecuci贸n solo puede responder a 1 tarea a la vez pero pudiendo hacerlas sin importar si la respuesta es dato o error con tal de no obstruir el programa.

Esta muy buena esta clase, por que es como un glosario de los conceptos que veremos a lo largo del curso y son los aspectos principales del manejo de los procesos s铆ncronos y as铆ncronos en JavaScript indispensable esta clase!! 馃挌

Formas en las que JavaScript puede manejar la Asincron铆a:
Callbacks
Promesas
Async / Await

callback -> funcion pasado hacia otra funcion !!

Modelo de concurrecion basado en evento llamado event loop

Este video de youtube es sobre como funciona el event loop, va paso a paso. Me ayudo a entender un poco mas como funciona el asincronismo en chrome.

Si tienen dudas acerca de como funciona y entienden ingl茅s, el siguiente video fue lo que me ilumin贸 respecto a casi todos los conceptos que menciona Oscar:

What the heck is the event loop anyway? | Philip Roberts | JSConf EU

隆Espero sea de ayuda!

por aca un ejemplo practico de asincronismo.

https://www.youtube.com/watch?v=bWvnWhVCHAc

Es importante no confundir paralelismo y concurrencia como me pas贸 a mi 馃槄

  • Concurrencia: Capacidad de un sistema para manejar m煤ltiples tareas o procesos simult谩neamente
  • Paralelismo: Capacidad de un sistema para ejecutar m煤ltiples tareas o procesos simult谩neamente en n煤cleos diferentes de procesamiento

La diferencia es clave:

  • Concurrencia -> Manejar
  • Paralelismo -> Ejecutar

Por lo tanto JS goza de concurrencia, pues puede manejar distintas tareas simult谩neamente, ejecutando unas sincronamente y 鈥減ostergando鈥 otras (sujet谩ndolas a alguna espera, evento, etc.)

NB: Este concepto de tratar tareas de manera no bloqueante sujet谩ndolas a ciertos triggers gracias a un event loop es la nominada: 鈥渆vent-driven programming鈥 o la 鈥減rogramaci贸n basada en eventos鈥

Cualquier aporte o cr铆tica a mi peque帽铆sima investigaci贸n de conceptos es bienvenida 馃槂

"Concurrencia en JavaScript: Utiliza un modelo de concurrencia basado en鈥"
No pos muy bien鈥

Obligatorio ver este video al menos 2 veces, no porque el profe no sepa explicar, si no para que nos quede bien clarito, este video es importantisimo!! Gracias 馃槂

https://stackoverflow.com/questions/1050222/what-is-the-difference-between-concurrency-and-parallelism#1050257

Recurso en ingl茅s de StackOverflow sobre programaci贸n concurrente y paralela

Les dejo un ejemplo de callback

function saludar(nombre) {
  alert('Hola ' + nombre);
}

function procesarEntradaUsuario(callback) {
  var nombre = prompt('Por favor ingresa tu nombre.');
  callback(nombre);
}

procesarEntradaUsuario(saludar);

Link: https://developer.mozilla.org/es/docs/Glossary/Callback_function

Vengo de ver un curso antiguo donde Oscar era el profe, y o sea, no estaba mal, pero ha mejorado much铆simo como profe, felicitaciones y gracias por ayudarme a entender bien este concepto 馃檪 estoy ansioso de seguir con las otras clases

Definici贸n de caracter铆sticas de Javascript: Javascript es as铆ncrono y no bloqueante con un bucle de eventos que define su concurrencia y que implementa un 煤nico hilo de procesamiento.

Descripci贸n propiedad de Javascript: Single Thread. Aunque tengas una arquitectura de m煤ltiples procesadores en tu computador, Javascript trabajar谩 en un 煤nico hilo llamado hilo principal.

Caracter铆stica bloqueante de Javascript. Significa que una tarea no devuelve el control hasta que esta haya terminado bloqueando por completo el flujo del programa. Un ejemplo de esto se encuentra en el uso de los Alert.

Caracter铆stica de asincronismo en Javascript. Las tareas pueden ser realizadas mas tarde haciendo posible que su respuesta sea procesada en diferido. Podemos continuar nuestro procesamiento sin tener que esperar que una API devuelva los datos que le pedimos. Ya si estos se muestran o no no va a significar que nuestra p谩gina se congele mientras se espera la respuesta del API.

Caracteristica de sincronismo en Javascript. Cada tarea deber谩 esperar a que termine la anterior para continuar con la siguiente.

B谩sicamente el ser s铆ncrono es que puede realizar una tarea a la vez, mientras que cuando es as铆ncrono realiza varias tareas a la vez, donde estas tareas se realizan en 鈥渟egundo plano鈥 hasta que est茅n listas para ser usadas.

<https://developer.mozilla.org/es/docs/Learn/JavaScript/Asynchronous/Introducing> Esta explicacion es la mejor que encontre para esto.
**驴QU脡 ES EL AS脥NCRONISMO?** *Los lenguajes de programaci贸n por **defecto** son **sincr贸nos**, lo que **significa** que debe **ejecutarse** **tarea** por **tarea**, en el **transcurso** de la **evoluci贸n** de las **tecnolog铆as** se han **implementado** **conceptos**, **librer铆as** y **recursos** que le **a帽aden** a los **lenguajes** de programaci贸n la **capacidad** de **trabajar** de manera **as铆ncrona**.* **JavaScript** *se **define** como un lenguaje de programaci贸n **s铆ncrono** por **defecto** y tiene **solo** un **subproceso**, es decir, un **solo** **hilo** para **trabajar**. En **diferentes** **documentaciones** del **lenguaje** se tiene **otro** **concepto** el cual es:* **JavaScript** *es un **lenguaje** **s铆ncrono** y **no** **bloqueante**, con un **bucle** de **eventos** con el cual se maneja la **concurrencia** con un **煤nico** **hilo** para sus **interfaces** de **entrada** y **salida**. Esta **definici贸n** permite **entender** como **funciona*** **JavaScript** *y cuales son los **retos** a **enfrentar**.* **CONCEPTOS PRINCIPALES** * **SINGLE-THREADED** *A煤n con **m煤ltiples** **procesadores** en la **CPU**, **solo** se puede **ejecutar** **tareas** en un **solo** **hilo**, **llamado** el **hilo** **principal**.* * **BLOQUEANTE** ***Significa** que la **ejecuci贸n** de una **tarea** **no** **devuelve** el **control** hasta que esta **tarea** sea **completada**, por lo tanto, una **tarea** puede llegar a ser **bloqueada**, por ejemplo: el **uso** de la **funci贸n*** **alert*.*** * **NO BLOQUEANTE** ***Significa** que la **ejecuci贸n** de una **tarea** **devuelve** **inmediatamente** el **control** para poder **continuar** con la **ejecuci贸n** de la **aplicaci贸n** **sin** la **necesidad** de tener que **detenerse**. Lo que permite tener el **seguimiento**, **devolviendo** los **datos** o **manejando** **alg煤n** **error** **seg煤n** sea el **caso**.* * **S脥NCRONO** ***Significa** que las **tareas** que se **ejecutan** de manera **secuencial** deben **esperar** a que se **completen** para poder **continuar** con la **siguiente** **tarea**.* * **AS脥NCRONO** ***Significa** que las **tareas** que se **ejecuten** pueden ser **resueltas** **luego**, es decir, m谩s **tarde** lo que hace **posible** que la **respuesta** pueda ser **diferida** y poder **continuar** con la **ejecuci贸n** de la **aplicaci贸n**.* * **EVENT LOOP** **JavaScript** ***utiliza** para **manejar** la **concurrencia** un **modelo** **basado** en **eventos**. Este **bucle** de **eventos** en un **patr贸n** de **dise帽o** que **espera** y **distribuye** **eventos** o **mensajes** en un **programa**.* * **CALLBACKS** *Es una **funci贸n** es **pasada** como **argumento** **dentro** de **otra** **funci贸n** y esta ser谩 **invocada** **seg煤n** sea la **necesidad**.* * **PROMESAS** *Estas son **funciones** **no-bloqueantes** que **trabajan** de manera **as铆ncrona** la **cual** **va** a **cumplir** una 鈥減romesa鈥, esta **promesa** puede **suceder** **ahora**, en el **futuro** o **nunca**.* * **ASYNC / AWAIT** *Permite **estructurar** una **funci贸n** **as铆ncrona** **sin bloqueo** de una manera muy **similar** a una **funci贸n** **tradicional**.* **EVOLUCI脫N DE JAVASCRIPT** *En **funci贸n** de **todas** la **caracter铆sticas** y **funcionalidades** que ha ido **adquiriendo*** **JavaScript** *a lo **largo** de los **a帽os**.* **JavaScript** *se **convierte** en un **lenguaje** **Multi-Hilo** con la **capacidad** de **realizar** **m煤ltiples** **tareas** **simult谩neamente**.* *Este **concepto** de como fue **concedido** es **s铆ncrono**, pero se **dispone** de **herramientas** **dise帽adas** para **trabajar** la **as铆ncronia** **dentro** del **proyecto**. Con base en lo **anterior** la **definici贸n** del **lenguaje** de **programaci贸n*** **JavaScript** ***cambia** un **poco** y podr铆a **definirse** de la **siguiente** manera:* **JavaScript** *se **define** como un **lenguaje** de **programaci贸n** **as铆ncrono** y **no** **bloqueante**, con un **bucle** de **eventos*** (para manejar la concurrencia) *e **implementado** con un **煤nico** **hilo** para sus **interfaces** de **entrada** y **salida***
pero node como esta basado en js como me deja crear hilos ?
gran clase!
Una explicacion bastante buena acerca del Event Loop: <https://www.youtube.com/watch?v=8aGhZQkoFbQ>
El asincronismo en JavaScript se refiere a la capacidad del lenguaje para realizar operaciones sin bloquear la ejecuci贸n del c贸digo. En lugar de esperar a que una operaci贸n se complete antes de pasar a la siguiente, JavaScript permite que ciertas operaciones se realicen de manera as铆ncrona, lo que significa que pueden ejecutarse en segundo plano mientras el programa principal contin煤a su ejecuci贸n.

驴Qu茅 es asincronismo?

En JavaScript, el asincronismo es una caracter铆stica crucial debido a su naturaleza basada en eventos y al entorno de ejecuci贸n en el que se encuentra com煤nmente: el navegador web. JavaScript se ejecuta en un solo hilo, lo que significa que solo puede realizar una tarea a la vez. Sin embargo, para manejar operaciones que podr铆an bloquear la ejecuci贸n, como la carga de recursos externos o las solicitudes a servidores, se utilizan t茅cnicas asincr贸nicas para evitar que el hilo principal quede inactivo.

Aqu铆 hay algunas formas comunes en las que se implementa el asincronismo en JavaScript:

  1. Callbacks: Los callbacks son funciones que se pasan como argumentos a otras funciones. Se utilizan para manejar acciones as铆ncronas. Por ejemplo, en una solicitud de XMLHttpRequest (XHR) para obtener datos de un servidor, un callback se ejecuta cuando los datos est谩n listos para ser procesados.

    fetchDataFromServer(function(data) {
      // Hacer algo con los datos obtenidos
    });
    
  2. Promesas: Las promesas son una abstracci贸n m谩s avanzada que maneja el asincronismo. Permiten un mejor manejo de la ejecuci贸n as铆ncrona y el manejo de errores. Una promesa representa un valor que puede estar disponible ahora, en el futuro o nunca. Las promesas tienen dos m茅todos clave: then() para manejar el resultado exitoso y catch() para manejar errores.

    fetchDataFromServer()
      .then(function(data) {
        // Hacer algo con los datos obtenidos
      })
      .catch(function(error) {
        // Manejar errores
      });
    
  3. Async/await: Esta es una sintaxis m谩s moderna y legible para trabajar con promesas. La palabra clave async se coloca antes de una funci贸n para indicar que contiene operaciones as铆ncronas, y await se usa dentro de la funci贸n para esperar a que una promesa se resuelva antes de continuar.

    async function fetchData() {
      try {
        const data = await fetchDataFromServer();
        // Hacer algo con los datos obtenidos
      } catch (error) {
        // Manejar errores
      }
    }
    


En resumen, en JavaScript, el asincronismo se implementa mediante callbacks, promesas y la sintaxis async/await. Estas t茅cnicas permiten que las operaciones as铆ncronas se manejen de manera m谩s eficiente y legible, evitando bloqueos en la ejecuci贸n y mejorando la capacidad de respuesta de las aplicaciones.

Espero sea de utilidad. 馃懆鈥嶐煉

Mi 煤nico conflicto con los cursos de Oscar es que redunda mucho sus ideas, y tanto rodeo le hace perder el hilo. 鈥淎hora鈥 Ma帽ana鈥 贸 Nunca鈥 隆Por Dios!

Oscar Bajaras TOP 1 馃槑

JavaScript is an synchronous language, executing task by task in a one single thread, non-blocking, with a event loop to hangle concurrency
.
.
Asynchronims is a paradigm where we need handle things happens in a parallalel way or in different moments. Where task are executed independently of each other and do not need to wait for each other to complete.
.
Asynchronous operations can occur concurrently or in a non-blocking manner, allowing the program to continue executing other tasks while waiting for certain operations to finish.
.
It looks like a assembly line where every box is a task and they pass throught the executer one by one, like in a line assembly
.

Me encant贸 la explicaci贸n final

Osea es singlethrea multithread

ASINCRONISMO CON JAVASCRIPT

-Todos los lenguajes de programaci贸n son s铆ncronos. Es decir, tienen que ejecutarse tarea por tarea.

-JavaScript procesa las tareas en un solo hilo (single-thread), sin importar si se tiene o no m煤ltiples procesadores.

-Conceptos clave:

*Bloqueante: una tarea no devuelve el control hasta que se ha completado. Ejemplo la funci贸n alert() para que siga la ejecuci贸n luego de esta, se tiene que cerrar el cuadro que invoca.

*No bloqueante: Una tarea devuelve el control inmediatamente con independencia del resultado. Si se complet贸, devuelve los datos, sino arroja un error.

*S铆ncrono: Las tareas se ejecutan de manera secuencial y por ende deben esperar a que se completen para continuar con la siguiente tarea.

*As铆ncrono: Las tareas pueden ser realizadas m谩s tarde, por lo que la respuesta puede ser diferida, mientras otras tareas se est茅n ejecutando durante esa espera.

*Paralelismo: Es la ejecuci贸n simult谩nea de dos o m谩s tareas. Algunas tareas se pueden dividir en partes m谩s peque帽as que pueden ser resueltas simult谩neamente.

*Concurrencia: Es la capacidad de un algoritmo o programa para ejecutar m谩s de una tarea a la vez. El concepto es similar al procesamiento paralelo, pero con la posibilidad de que muchos trabajos independientes hagan diferentes cosas a la vez en lugar de ejecutar el mismo trabajo.

-CALLBACKS: Una funci贸n es pasada como argumento en otra funci贸n.

-PROMESAS (ES6): Son funciones no bloqueantes y as铆ncronas, las cuales pueden retornar un valor ahora, en el futuro o nunca.

-ASYNC/AWAIT: Permite estructurar una funci贸n asincr贸na sin bloqueo de una manera muy similar a una funci贸n sincr贸ica ordinaria.

Con todo lo mencionado se puede definir a JavaScript como un lenguaje as铆ncrono, y no bloqueante.

JS curso asincronismo. que significa que un lenguaje sea bloqueante.

  • Una de las caracter铆sticas importantes de JavaScript es que es as铆ncrono, lo que significa que puede hacer varias cosas al mismo tiempo. Tambi茅n es 鈥no bloqueante鈥, lo que significa que cuando se hace una tarea, no bloquea todo el programa. En otras palabras, puedes hacer algo m谩s mientras est谩s esperando que una tarea se complete.

  • Para permitir que JavaScript haga varias cosas al mismo tiempo, usa un 鈥bucle de eventos鈥. Este es un proceso que permite que el programa espere a que ocurran eventos, como hacer clic en un bot贸n o recibir una respuesta de un servidor, mientras se sigue ejecutando el resto del programa.

  • Aunque JavaScript puede hacer varias cosas al mismo tiempo, utiliza solo un hilo para sus interfaces de entrada/salida (I/O). Esto significa que solo puede hacer una cosa a la vez para leer o escribir datos en la pantalla o en el servidor. Sin embargo, el bucle de eventos ayuda a mantener todo en orden, permitiendo que el programa responda r谩pidamente a las solicitudes de los usuarios.

2/26 Qu茅 es el asincronismo
Los lenguajes de programaci贸n son sincronos de por s铆. Esto significa que se ejecutan tarea, a tarea. Se le han agregado a los lenguajes de programaci贸n a traves de librerias, conceptos y recursos la posibilidad de trabajar de manera asincronica. Para el caso de JavaScript es un lenguaje de programaci贸n s铆ncrono por defecto y que solo utiliza un subproceso, es decir un solo hilo para trabajar. Otra forma de definirlo es que JavaScript es s铆ncrono y no bloqueante, con un bucle de eventos (concurrencias), implementado con un 煤nico hilo para sus interfaces de I/O.

Los conceptos que se manejan de forma general son:

  • Single-Threaded: JavaScript solo puede realizar una tarea a la vez, lo que lo hace menos eficiente para manejar tareas intensivas en recursos y para aprovechar los sitemas de m煤ltiples n煤cleos.
  • Bloqueante: Una tarea en JavaScript debe completarse antes de que se pueda realizar la siguiente tarea. Esto puede hacer que la ejecuci贸n de tareas intensivas en recursos se vuelva lenta o incluso se detenga, lo que afecta el rendimiento de la aplicaci贸n.
  • No Bloqueante: una tarea en JavaScript no tiene que esperar hasta que se completa otra tarea antes de poder comenzar.
  • S铆ncrono: las tareas se relizan una a la vez en un orden determinado, es decir, una tarea debe completarse antes de que se inicie la siguiente.
  • As铆ncrono: Varias tareas pueden ejecutarse al mismo tiempo sin esperar a que una tarea se complete antes de iniciar la siguiente.
  • Concurrencia: Varias tareas pueden ejecutarse al mismo tiempo en un solo hilo de ejecuci贸n.
  • EventLoop: Es un mecanismo de programaci贸n que permite manehar la concurrencia y el as铆ncronismo. El event loop verifica constantemente si hay tareas que se han completado, y si es as铆, las maneja de manera as铆ncrona. De esta manera permite que varias tareas se ejecuten al mismo tiempo sin bloquear el hilo de ejecuci贸n.

Formas de Manejar la asincron铆a en JavaScript:

  • Callbacks: Son funciones que se pasan como argumentos a otras funciones y se llaman despu茅s de que se completa una tarea as铆ncrona.
  • Promesas: Son objetos que representan valores que pueden estar disponibles ahora, en el futuro o nunca, y permiten manejar de forma as铆ncrona la finalizaci贸n de una tarea.
  • Async y Await: Son palabras clave de javaScript que se utilizan para escribir c贸digo asincr贸nico de forma s铆ncrona y f谩cilmente legible. Permiten esperar la finalizaci贸n de una tarea asincr贸nica antes de continuar con la ejecuci贸n del c贸digo.

En resumen JavaScript es as铆ncrono y no bloqueante, con un bucle de eventos (concurrencia) implementado con 煤nico hilo para sus interfaces de I/O.

Los lenguajes de programaci贸n por si mismos son s铆ncronos, o sea que ejecutan solo de a tarea. JS es sincr贸nico y no bloqueante con un bucle de eventos (concurrencia) implementado con un 煤nico hilo para sus interfaces de In (entrada) y O (out) salida.

  • Single threaded o hilo 煤nico: a煤n con m煤ltiples procesadores, solo se puede ejecutar las tareas en un solo hilo, llamado el hilo principal.
    Bloqueante: una tarea no devuelve el control hasta que se ha completado.

  • No bloqueante: una tarea devuelve inmediatamente el control para poder continuar sin necesidad de detener la aplicaci贸n.

  • S铆ncrono: las tareas se ejecutan de forma secuencial, se debe esperar a que se complete para continuar con la siguiente tarea.

  • As铆ncrono: las tareas pueden ser realizadas m谩s tarde , lo que hace posible que una tarea sea procesada en diferido.

  • Concurrencia de JS: utiliza un modelo de concurrencia basado en loop de eventos. Event Loop es un patron de dise帽o que espera y distribuye eventos o mensajes en un programa.

  • Callback: una funci贸n que se pasa como argumento de otra funci贸n y que sera invocada.

  • Promesa: funci贸n no bloqueante, y as铆ncrona la cual puede retornar un valor ahora, en el futuro o nunca.

JS es s铆ncrono pero tenemos herramientas que nos ayudan a trabajar en asincron铆a.

Mi resumen:

Javascript es un lenguaje de programacion single-threaded por naturaleza. Nos permite ejecutar una serie de procesos de manera secuencial, donde necesitamos que termine uno para que inicie otro.
.
Con las nuevas herramientas traidas en ES6+ podemos poner en practica en asincronismo.
.
El asincronismo seria el poder realizar multiples tareas al mismo tiempo, sin que hayan tareas necesariamente bloqueantes.
.
Esto nos permite que otras tareas puedan llevarse acabo sin importar que otra no haya terminado鈥

Aqui por si quieren entender el asincronismo y event loop paso a paso y reforzar lo aprendido en la clase

Click Aqui

驴Qu茅 es el asincronismo?

Res煤men:

Hay que entender que los lenguajes son s铆ncronos, incluyendo a Js. Significa que tienen que ejecutarse tareas en orden. Poco a poco se han ido agregando funcionalidades que permiten trabajar con el asincronismo.
.
Javascript es sincrono y no bloqueante, con un bucle de eventos (concurrencia), implementado con un unico hilo para sus interfaces de entrada y salida.
.
Javascript es single-threaded. (Unico hilo) A煤n con m煤ltiples procesadores, solo se puede ejecutar en un solo hilo, llamado el hilo principal.
.
Bloqueante: Una tarea no devuelve el control hasta que se ha completado.
.
No-bloqueante: Una tarea se devuelve inmediatamento con independencia del resultado. Si se complet贸.
.
S铆ncrono: Las tareas se ejecutan de forma secuencia, se debe esperar a que se complete para continuar con la siguiente tarea.
.
As铆ncrono: Las tareas pueden ser realizadas m谩s tarde, lo que hace posible que una respuesta sea procesada en diferido.
.
Concurrencia en Javascript: Utiliza un modelo de concurrencia basado en un loop del eventos, 鈥淓vent Loop鈥.
.
Event Loop: El bucle de eventos es un patron de dise帽o que espera y distribuye los eventos segun sea el caso.
.

驴Cu谩les son las formas en que Javascript puede trabajar la asincron铆a?

  1. Callbacks.
    Una funcion que se pasa como argumento de otra funci贸n y ser谩 invocada.
  2. Promesas (ES6).
    Funci贸n no bloqueante y as铆ncrona la cual puede retornar un valor ahora, en el futuro o nunca.
  3. Async, Await (ES8, ES13)
    Permite estructurar una funcion asincrona sin bloquea de una manera similar a una funcion sincronica ordinaria.

Javascript acaba de convertirse en Multi-Threaded con la capacidad de realizar m煤ltitlpes tareas simult谩neamente gracias a las nuevas herramientas implementadas.

驴Qu茅 es el Asincronismo?

Los lenguajes de programaci贸n por si mismo son sincr贸nos, es decir, implementan, tarea despu茅s de otra tarea. JavaScript es s铆ncrono por defecto y tiene un solo subproceso, un solo hilo para trabajar.

JavaSCript es s铆ncrono y no bloqueante con un bluche de eventos que maneja la concurrencia. implementando con un 煤nico hilo para sus interefaces de entrada y salida (inputs y outputs)

JavaScript es Single-Threaded
A煤n con multiples procesadores solo se puede ejcutar tareas en un solo hilo llamado el hilo principal.

Bloqueante: Una tarea no devuelve el control hasta que se ha completado.

No Bloqueante: Una tarea se devuelve inmediantamente con independecia del resultado. si se complet贸 devuelve los datos. Si no, un error.

S铆ncrono: Las tareas se ejecutan de forma secuencial, sebe esperar a que se complete para continuar con la siguiente tarea.

As铆ncrono: Las tareas pueden ser realizadas m谩s tarde, lo que hace posible que una respuesta sea procesada en diferido.

Concurrencia en JavaScript: Utiliza un modelo de concurrencia basado en un 鈥渓oop de eventos鈥 llamado EVENT LOOP.

EventLoop: El b煤cle de eventos es un patr贸n de dise帽o que espera y distribuye eventos o mesnajes en un programa.

Formas de manejar la Asincronia
Callbacks: una funci贸n que se pasa como argumento de otra funci贸n y que ser谩 invocada.

Promesas鈥(ES6) Funci贸n no-bloqueante y as铆ncrona la cual puede retornar un valor ahora, ma帽ana o nunca.

Async / Await (ES2017) Permiteestructurar una funci贸n as铆ncrona sin bloqueo de una manera similar a una funci贸n sincr贸nica ordinaria.

JavaScript acaba de convertirse en Multi-Threaded(Multi-Hilo) con la capacidad de realizar m煤ltiples tareas simult谩neamente.

JavaScript ahora ser铆a: as铆ncrono y no bloqueante, con un bucle de eventos (concurrencia) implementado con un unico hilo para sus interfaces de inputs y outputs.

Excelente profe! me quedo muy claro todo lo que explico!!

Los lenguajes de programaci贸n por s铆 mismo son S铆ncronicos, lo qie significa que ejecutan una tarea detr谩s de otra, pero con el tiempo se desarrollaron librer铆as y recursos para poder trabajar con el as铆ncronismo.

Definiones de c贸mo funciona JavaScript

  • JavaScript es s铆ncrono por defecto y que solamente utiliza un subproceso, un solo hilo para trabajar.
  • JavaScript es s铆ncrono y no bloqueante, con un bucle de eventos (concurrencia), implementado con un 煤nico hilo para sus interfaces de I/O;

JavasScript es single-threaded

A煤n con m煤ltiples procesadores, solo se puede ejecutar tareas en un solo hilo, llamado el hilo principal.

Qu茅 quiere decir:

  • Bloqueante: una tarea no devuelve el control hasta que se ha completado.
  • No bloqueante: una tarea se devuelve inmediatamente con independencia del resultado. Si se complet贸, devuelve los datos. Si no, un error.
  • S铆ncrono: las tareas se ejecutan de forma secuencial, se debe esperar a que se complete para continuar con la siguiente tarea.
  • As铆ncrono: las tareas pueden ser realizadas m谩s tarde, lo que hace posible que una respuesta sea procesada en diferido (un tiempo despu茅s).

Concurrencia en JavaScript

Utiliza un modelo de concurrencia basado en un 鈥渓oop de eventos鈥.

EventLoop

El bucle de eventos es un patr贸n de dise帽o que espera y distribuye eventos o mensajes de un programa seg煤n sea el caso.

Formas de manejar la asicron铆a en JavaScript.

  1. CallBacks: una funci贸n que se pasa como argumento de otra funci贸n y ser谩 invocada seg煤n la necesidad.
  2. Promesas (ES6): funci贸n no-bloqueante y as铆ncrona la cual puede retornar un valor ahora, en el futuro o nunca.
  3. Async / Await (ES2017): permite estructurar una funci贸n asincr贸nica sin bloquo de una manera similar a una funci贸n sincr贸nica ordinaria.

驴JavaScript acaba de convertirse en Multi-Threaded con la capacidad de realizar m煤ltiples tareas simultaneamente?

Si y no. JS es s铆crono por defecto, pero tenemos herramientas que nos ayudan a trabajar con el As铆ncronismo.

Nueva definici贸n de c贸mo funciona JavaScript

JavaScript es: As铆ncrono y no bloqueante, con un bucle de eventos (concurrencia) implementado con un 煤nico hilo para sus interfaces de I/O.

En esta clase entend铆 mucho m谩s de lo que entend铆 en todo el curso pasado, la verdad muy bien explicado.

definici贸n JS

Es muy recomendable echar un vistazo al curso de V8

Excelente esta clase, realmente me hizo despejar todas mis dudas sobre los conceptos de como funciona el lenguaje pero quiero acotar nada mas este peque帽o resumen:

JAVASCRIPT no es multi-hilo(implementa un 煤nico hilo para sus interfaces de entrada/salida), el concepto del lenguaje es s铆ncrono pero gracias a la CONCURRENCIA hay mecanismos
con la capacidad de realizar m煤ltiples tareas simult谩neamente(estos gracias a la arquitectura del EventLoop o loop de eventos)

Dicho eso de ah铆 parte el concepto final del tutor en el min 08:44

Si les quedan dudas sobre la concurrencia b谩sicamente es es la habilidad que tiene un computador, programa etc de realizar varias tareas a la vez ,de ah铆 parte los conceptos de as铆ncrono o asincronismo

Saludos !!

WOW, Excelente explicaci贸n de Asincronismo 鉂わ笍

Mi resumen de la clase

JavaScript es s铆ncrono y no bloqueante, con un bucle de eventos (concurrencia), implementado con un 煤nico hilo para sus interfaces de I/O.

  • JavaScript es single-threaded. Todas las tareas se ejecutan en un solo hilo, conocido como hilo principal.
  • Bloqueante: una tarea no devuelve el control hasta que est茅 terminada. Ejemplo: funci贸n alert().
  • No bloqueante: la tarea devuelve inmediatamente el control independientemente del resultado. Si se completa exitosamente devuelve los datos, de lo contrario devuelve un error. Dado que la tarea devuelve inmediatamente el control, no es necesario detener la App.
  • S铆ncrono: las tareas se ejecutan de forma secuencial, uno despu茅s de la otra, para que una tarea se ejecute, antes debe finalizar la anterior.
  • As铆ncrono: las tareas se pueden ejecutar de forma diferida, pudiendo poner tareas en espera.
  • Concurrencia: JavaScript utiliza un modelo de concurrencia basado en un loop de eventos.
  • EventLoop: es un patr贸n de dise帽o en el que se espera y distribuye eventos o mensajes en un programa.
  • Formas en que JavaScript implementa la asincron铆a:
    • Callbacks: funci贸n que se pasa como argumento a otra funci贸n.
    • Promesas: funci贸n no bloqueante y as铆ncrona que puede retornar un valor ahora, en el futuro o nunca.
    • Async / await: permite crear una funci贸n as铆ncrona sin bloqueo de una forma muy similar a una funci贸n s铆ncrona convencional.
  • En s铆ntesis JavaScript sigue siendo single-threaded, pero a lo largo del tiempo ha implementado herramientas que faciliten implementar concurrencia, algo similar a tener un asistente que haga unas tareas mientras nosotros terminamos otras.

JavaScript es s铆ncrono y trabaja en un solo hilo (single-threaded), pero cuenta con subproceso que lo convierte en as铆ncrono, pero sigue trabajando en un solo hilo. Esto es posible por la l贸gica de los call backs (Luego se actualizo a promesa y posteriormente a async / await).

Javascript fue concebido como un lenguaje de programaci贸n sincrono, no obstante, con el paso de los a帽os ha ido evolucionando de acuerdo a las nuevas problem谩ticas en el desarrollo web. Actualmente javascript es un lenguaje asincrono y no bloqueante que maneja la concurrencia con un event loop el cual maneja dos estructuras de datos: pila y cola de prioridades. En la pila est谩n los procesos principales y no bloqueantes, en la cola de prioridades se maneja la asincron铆a, sin embargo, las promesas tienen prioridad.

Hice una investigacion sobre los conceptos explicados en esta clase, les dejo para quien le sea de ayuda:

  • Proceso
    • Es la ejecuci贸n de un programa ( conjunto de instrucciones y datos).
    • Para poder ser ejecutado necesita al menos un thread.
    • El sistema operativo ser谩 quien cree, ejecute y controle todos los procesos.
    • Son entidades independientes y no comparten recursos entre ellos.
  • Thread (hilo):
    • Es un sub proceso.
    • Es la ejecuci贸n de un conjunto de instrucciones.
    • Estos nacen y mueren dentro de un proceso, pertenece a 茅l.
    • Si comparten recursos, comparten informaci贸n.
  • Single-threaded:
    • aun con m煤ltiples procesadores, solo se puede ejecutar tareas en un solo hilo, llamado el hilo principal.
  • Concurrencia:
    • Cuando dos o m谩s tareas progresan simult谩neamente.
    • No implica necesariamente m谩s de un thread.
  • Paralelismo:
    • Cuando dos o m谩s tareas se ejecutan, literalmente, a la vez, en el mismo instante de tiempo.
    • Necesita m谩s de thread.
    • Es un caso particular de concurrencia donde las cosas suceden exactamente al mismo tiempo.
  • Operaciones CPU-bound.
    • Conocidas como operaciones limitadas por CPU.
    • Son operaciones de las tareas cuya carga (el c贸digo asociado a ellas) ser谩 ejecutada en nuestra aplicaci贸n.
  • Operaciones I/O-bound
    • Conocidas como operaciones limitadas por entrada/salida.
    • Estas operaciones disparan peticiones especiales que son atendidas fuera del contexto de nuestra aplicaci贸n.
    • Ejemplo: leer un fichero en disco, acceder a una base de datos externa o consultar datos a trav茅s de la red.
    • Desde nuestro programa se ordena la lectura de un fichero en disco, pero es el sistema operativo y el propio disco los involucrados en completar esta petici贸n.
  • Las operaciones I/O comprendidas en dos fases:
    • Fase de Espera a que el dispositivo est茅 listo, a que la operaci贸n se complete o que los datos est茅n disponibles.
    • Fase de Ejecuci贸n entendida como la propia respuesta, lo que sea que quiera hacerse como respuesta a los datos recibidos.
    • Respecto a la fase de espera la operaci贸n puede ser bloqueante o no.
    • Respecto a la fase de ejecuci贸n ser谩 s铆ncrona o as铆ncrona.
  • Bloqueante:
    • Una llamada u operaci贸n bloqueante no devuelve el control a la aplicaci贸n hasta que se ha completado.
    • Por tanto el thread queda bloqueado en estado de espera.
  • No bloqueante:
    • Una tarea no bloqueante devuelve el control inmediatamente con independencia del resultado.
    • Si se complet贸, devuelve los datos. Si no, un error.
  • S铆ncrono:
    • La operaci贸n de entrada/salida se ejecuta de forma secuencial y, por tanto, debemos esperar a que se complete para procesar el resultado.
  • As铆ncrono:
    • Las tareas pueden ser realizadas m谩s tardes, , lo que hace posible que una respuesta sea procesada en diferido.
    • La finalizaci贸n de la operaci贸n I/O se se帽aliza m谩s tarde mediante un mecanismo espec铆fico como por ejemplo un callback, una promesa o un evento.
    • Como se puede adivinar, su comportamiento es no bloqueante ya que la llamada I/O devuelve inmediatamente.

El modelo de JavaScript

  • JavaScript fue dise帽ado para ser ejecutado en navegadores, trabajar con peticiones sobre la red y procesar las interacciones de usuario, al tiempo que se mantiene una interfaz fluida.
  • Ser bloqueante o s铆ncrono no ayudar铆a a conseguir estos objetivos, es por ello que JavaScript ha evolucionado intencionadamente pensando en operaciones de tipo I/O.
  • Por esta raz贸n: JavaScript es as铆ncrono y no bloqueante, con un bucle de eventos (concurrencia) implementado con 煤nico hilo para sus interfaces de I/O.

Debo agregar que estas clases quedaran mas completas si llevas antes o despues el curso de JS engine y navegador.
El event loop es una parte del navegador el cual permite a JS comportarse de manera asincrona, por eso el profesor menciona que existen herramientas que permiten eso, herramientas del navegador.
El evento loop junto al js engine ( memory heap y callstack) y otros elementos conforman el enviroment runtime que permite al JS crear apps como las conocemos.
Y es por esta raz贸n cuando uno empieza a estudiar nodejs encuentra la definicion" enviroment runtime fuera del navegador", es decir esta presente el engine y el evento loop.
Es muy interesante manejar todos los conceptos relacionados a nuestro lenguaje favorito para observar el panorama completo.

Resumen de la clase:

JavaScript es un lenguaje asincrono y no bloqueante, con un bucle de eventos (concurrencia) implementado con un unico hilo para sus interfaces de I/O.
Donde:

  • Asincrono: Las tareas no se realizan de manera secuencial. Las tareas pueden realizarse m谩s tarde, la respuesta sera procesada en diferido.
  • No boqueante: El hilo del proceso no queda en un estado de espera. Una tarea no bloqueante devuelve el control inmediatamente con independencia del resultado. Si se complet贸, devuelve los datos. Si no, un error.
  • Bucle de eventos: Patron de dise帽o encargado de manejar la concurrencia de eventos.
  • Hilo: el treadh, es el proceso donde se ejecutan las tareas.

Async - Await (ES2017) Permite estructurar una funci贸n asincr贸nica sin bloqueo de una manera similar a una funci贸n as铆ncrona ordinaria. En este video vamos a ver un ejemplo muy claro del uso de Asyn Await: https://youtu.be/rKK1q7nFt7M

Promesas (ES6). Funci贸n as铆ncrona (no bloqueante) que puede devolver un valor ahora, en el futuro o no devolver nada.

Los callbacks en Javascript. Un callback es una funci贸n que se pasa como argumento de otra funci贸n esperando ser ejecutada m谩s tarde.

Javascript es sincrono, ejecuta tarea por tarea en el call stack(pila de ejecucion), cuando se detecta una tarea que es asincrona(por ejemplo, un setTimeout), lo que realiza es colocarlo en espera, fuera del callstack. De ahi el event loop realiza una ejecucion preguntando cada momento si el call stack ya se ha terminado las tareas sincronas, una vez finalizada se pasa las tareas asincronas al call stack y se ejecutan de acuerdo al orden en que fueron llenados en el stack. Las tareas se ejecutan de arriba hacia abajo, esto por el apilamiento que se crea al cargar nuestro codigo javascript que es interpretado por el motor v8. Siempre al final la ultima tarea que se ejecutara es la primera tarea y lo ultimo que saldra del stack es el objeto global(window).

Ya termine el curso y les cuento que despues de este curso, veran todo mas claro, de pana que el profe mejoro mucho

Buena clase

Que gran explicacion de sincronia vs asincronia en js

Siento que el profe entro con mal pie a la clase de ECMA, pero aun tengo fe que era una introduccion mas que todo.

Espero que las clases que vengan , vengan con todo 馃槂

Obviamente como todo profesor da pautas y a uno le toca investigar mas a fondo 馃槂

Wow cada dia aprendo mas y mas, muchas gracias!!!