Interesante saberlo, y entender que lo importante es NO BLOQUEAR HILOS Y OPTIMIZAR SU PRONTA LIBERACION. Pero como bien dices, solo llegarás a analizarlo y a vivirlo cuando estés en un proyecto muy importantes con múltiples peticiones por segundo. Igual debería enseñarse como usar correctamente los Async await aunque nunca tengas un gran volumen de peticiones (aunque como todo, hay que aplicar ingeniería y saber como bien indicas si bloquear todo en uno o llamar con latencias)
Hola netmentor podrias hacer un video explicando la asincronia completa por favor? es un tema muy complicado diria yo porque hay muchas desinformacion mas que informacion vi el video que hiciste pero no esta muy completo espero leas mi comentario.gracias
@@NetMentor pero no hablas de hilos porque tengo entendido mas o menos que cuando se usa await se va a otro hilo ese proceso o algo parecido o podrias compartiorme alguna documentacion donde lo pueda aprender bien este tema gracias
@@HatsuneM_ALC no, cuando usas await el hilo va al thread pool si lo que esta sucediendo en tu app no es código (por ejemplo, buscar en la base de datos, esperar por una respuesta de la api, etc). Pero si todo lo que sucede en el proceso es sincrono, el await "no hace nada". eso hace que una api con 10 hilos, pueda administrar miles de llamadaápor minutos, sin el async/await serían cientos.
@@NetMentor Hola una pregunta cuando llamamos un metodo async se ejecuta en paralelo esa tarea?osea algo asi public async Task GetById(UserI user) { var request = await _context.UserIs.FirstOrDefaultAsync(x => x.UserId == user.UserId); return user; } estoy diciendo que esto se ejecute en paralelo el _context.UserIs.FirstOrDefaultAsync(x => x.UserId == user.UserId);
@HatsuneM_ALC en paralelo con que? si solo tienes una consulta. Si la pregunta es si se ejecuta de forma asíncrona, la respuesta es si. Te recomiendo que te veas el otro video que enlacé
por ejemplo en aws en ec2, se tiene un 4 nucleos, como configuras los hilos para cada docker container ? y que algun micro servicio container tenga mas prioridad de otro
cada nucleo son dos hilos, y respecto a docker, se puden configurar para que tengan mas o menos, pero si tienes mas de una app en EC2, o bien no necesitais EC2 o deberiais utilizar otras alternativas. (en mi opinion, sin saber lo que hay)
No, cuando un hilo se queda bloqueado simplemente la app se queda colgada y no puede recibir mas peticiones hasta que se libere y se van encolando Una forma muy sencilla de verlo es con una aplicación de escritorio que se queda pillada Cuando una app se cierra de la "nada" es porque ha ocurrido una excepción no controlada que hace que se pete la aplicación Para eso tendrias que poner un try catch global, si es web, pues en un middleware, aunque en asp eso esta controlado
tengo una duda, en Entity Framework, tenia entendido que no se podia asincronismo como tal, es decir capturando la tarea para hacer otra consulta sin esperar a que la primera culmine, es correcto?
@@juanmanuelorjuelaacosta3230 Claro, entiendo que si se puede usar async pero no como se muestra en el video, es decir haciendo multiples consultas en "paralelo" sin esperar a que la primera termine, para ello antiguamente se creaba una instancia del dbcontext con using en cada consulta o usar lock para mantenerlo en uso único.
what? claro que se puede; no se que es lo que quieres decir, pero creo que estas mezclando cosas, el lock se hace para bloquear el acceso a recursos compartidos, ni idea de como teníás la bbdd, pero quizá era para hacer transacciones y teniais conexiónes directas con la bbdd en vez de usar EF o algo así.
@@NetMentor Creo que se refiere a que las tares asíncronas son tareas de IO / bloqueantes, y que hasta hace pocas versiones (creo que ahora sí se puede), había métodos de entity framework que no implementaban ASYNC, como por ejemplo un Delete, o un Update, ya que se es una operación inmediata, ejecutar y ya, que no esperaba respuesta.
Paso que creo contenido y digan lo que digan a Linux le falta para estar al nivel de Windows o Mac :/ Cualquier problema en Arch son 10horas de buscar en foros 🤣
Pero: “realmente” cuantos hilos puede soportar por ejemplo un servidor de una APII ? 10? Porque si tenemos un IIS con algún endpoint que tarde un par de segundos, un cálculo rápido me lleva a pensar que como mucho puede resolver 20 o 30 llamadas x minuto ??? Si a eso le sumamos que normalmente una Api Puede tener 20 o 30 metodos… y que a veces un servidor tiene 4 o 5 apis… es todo un desastre!! Cual es la solución?
dependerá del procesador, pero por ejemplo yo tengo un ryzen 7 y tienen 2 por núcleo, asi que 16. luego ten en cuenta que si tienes todo async/await los hilos se van liberando y no están esperando, asi que aunque tarde 2 segundos o 10 alomejor "en el código" pasan 50 ms.
Twitter: twitter.com/NetMentorTW
Blog: www.netmentor.es/entrada/thread-pool-starvation
SI usas itemDto.Result podria causar un Deadlock (por que estas intentado llamar algo sincrono dentro de un metodo asyncrono)
solución?
@@kiquenet usar await
@@juanmanuelorjuelaacosta3230
// Antipattern
var result = myAsyncMethod().Result;
// Recommended Approach
var result = await myAsyncMethod()
Interesante saberlo, y entender que lo importante es NO BLOQUEAR HILOS Y OPTIMIZAR SU PRONTA LIBERACION. Pero como bien dices, solo llegarás a analizarlo y a vivirlo cuando estés en un proyecto muy importantes con múltiples peticiones por segundo. Igual debería enseñarse como usar correctamente los Async await aunque nunca tengas un gran volumen de peticiones (aunque como todo, hay que aplicar ingeniería y saber como bien indicas si bloquear todo en uno o llamar con latencias)
yendo a las entrañas!!! muy buen video
Que buen contenido!!
Hola netmentor podrias hacer un video explicando la asincronia completa por favor? es un tema muy complicado diria yo porque hay muchas desinformacion mas que informacion vi el video que hiciste pero no esta muy completo espero leas mi comentario.gracias
Tengo uno
czcams.com/video/zZ8cozxO22E/video.htmlsi=7JNAEXdOze-7UMQU
@@NetMentor pero no hablas de hilos porque tengo entendido mas o menos que cuando se usa await se va a otro hilo ese proceso o algo parecido o podrias compartiorme alguna documentacion donde lo pueda aprender bien este tema gracias
@@HatsuneM_ALC no, cuando usas await el hilo va al thread pool si lo que esta sucediendo en tu app no es código (por ejemplo, buscar en la base de datos, esperar por una respuesta de la api, etc). Pero si todo lo que sucede en el proceso es sincrono, el await "no hace nada".
eso hace que una api con 10 hilos, pueda administrar miles de llamadaápor minutos, sin el async/await serían cientos.
@@NetMentor Hola una pregunta cuando llamamos un metodo async se ejecuta en paralelo esa tarea?osea algo asi
public async Task GetById(UserI user)
{
var request = await _context.UserIs.FirstOrDefaultAsync(x => x.UserId == user.UserId);
return user;
}
estoy diciendo que esto se ejecute en paralelo el _context.UserIs.FirstOrDefaultAsync(x => x.UserId == user.UserId);
@HatsuneM_ALC en paralelo con que? si solo tienes una consulta.
Si la pregunta es si se ejecuta de forma asíncrona, la respuesta es si.
Te recomiendo que te veas el otro video que enlacé
Otro supervideo. Gracias
Muy buen video como siempre. Muchas gracias :)
por ejemplo en aws en ec2, se tiene un 4 nucleos, como configuras los hilos para cada docker container ? y que algun micro servicio container tenga mas prioridad de otro
cada nucleo son dos hilos, y respecto a docker, se puden configurar para que tengan mas o menos, pero si tienes mas de una app en EC2, o bien no necesitais EC2 o deberiais utilizar otras alternativas. (en mi opinion, sin saber lo que hay)
Tal vez está pregunta sea algo básica, pero esto también puede provocar que una aplicación se cierre de la nada? Saludos.
No, cuando un hilo se queda bloqueado simplemente la app se queda colgada y no puede recibir mas peticiones hasta que se libere y se van encolando
Una forma muy sencilla de verlo es con una aplicación de escritorio que se queda pillada
Cuando una app se cierra de la "nada" es porque ha ocurrido una excepción no controlada que hace que se pete la aplicación
Para eso tendrias que poner un try catch global, si es web, pues en un middleware, aunque en asp eso esta controlado
tengo una duda, en Entity Framework, tenia entendido que no se podia asincronismo como tal, es decir capturando la tarea para hacer otra consulta sin esperar a que la primera culmine, es correcto?
EF soporta async creo que desde la primera version de EF core
@@juanmanuelorjuelaacosta3230 Claro, entiendo que si se puede usar async pero no como se muestra en el video, es decir haciendo multiples consultas en "paralelo" sin esperar a que la primera termine, para ello antiguamente se creaba una instancia del dbcontext con using en cada consulta o usar lock para mantenerlo en uso único.
what? claro que se puede; no se que es lo que quieres decir, pero creo que estas mezclando cosas, el lock se hace para bloquear el acceso a recursos compartidos, ni idea de como teníás la bbdd, pero quizá era para hacer transacciones y teniais conexiónes directas con la bbdd en vez de usar EF o algo así.
@@NetMentor Creo que se refiere a que las tares asíncronas son tareas de IO / bloqueantes, y que hasta hace pocas versiones (creo que ahora sí se puede), había métodos de entity framework que no implementaban ASYNC, como por ejemplo un Delete, o un Update, ya que se es una operación inmediata, ejecutar y ya, que no esperaba respuesta.
Que sistema operativo utilizas para programar en C#?
Yo uso Mac aunque lo detesto. Pero Windows tiene Visual Studio, pero .NET es cross platform.
Un gran IDE es rider.
windows
@@NetMentor Finalmente no te gustó el paso a Arch? O que pasó con eso?
Paso que creo contenido y digan lo que digan a Linux le falta para estar al nivel de Windows o Mac :/
Cualquier problema en Arch son 10horas de buscar en foros 🤣
soy el comentario[0] :D
Pero: “realmente” cuantos hilos puede soportar por ejemplo un servidor de una APII ? 10?
Porque si tenemos un IIS con algún endpoint que tarde un par de segundos, un cálculo rápido me lleva a pensar que como mucho puede resolver 20 o 30 llamadas x minuto ???
Si a eso le sumamos que normalmente una Api Puede tener 20 o 30 metodos… y que a veces un servidor tiene 4 o 5 apis… es todo un desastre!! Cual es la solución?
dependerá del procesador, pero por ejemplo yo tengo un ryzen 7 y tienen 2 por núcleo, asi que 16.
luego ten en cuenta que si tienes todo async/await los hilos se van liberando y no están esperando, asi que aunque tarde 2 segundos o 10 alomejor "en el código" pasan 50 ms.
@@NetMentor si: entiendo. Muchísimas gracias… otra vez