Programació asíncrona és un paradigma de programació que permet executar múltiples operacions de manera no bloquejant, de manera que el programa pot continuar la seva execució mentre espera la finalització de tasques com operacions d’entrada/sortida.Documentació oficial de Python: asyncio, https://docs.python.org/3/library/asyncio.html Aquest model és especialment útil en aplicacions amb alt volum d’interaccions externes, com ara servidors web, sistemes de xarxa o interfícies d’usuari.
A diferència de la programació síncrona, on les operacions s’executen seqüencialment i cada tasca ha de finalitzar abans de continuar, la programació asíncrona permet gestionar múltiples tasques de manera concurrent sense necessitat de paral·lelisme.
Funcionament En la programació asíncrona, les operacions potencialment lentes (com accés a disc, xarxa o temporitzadors) s’executen de manera no bloquejant. Quan una tasca inicia una operació asíncrona, el control es retorna immediatament al sistema, que pot continuar executant altres tasques.
Aquest model es basa habitualment en un bucle d'esdeveniments, que gestiona una cua de tasques i s’encarrega de distribuir l’execució segons la disponibilitat de recursos o la finalització d’esdeveniments.
Concurrència La programació asíncrona permet implementar concurrència dins d’un únic fil d’execució. Diverses operacions poden estar en curs simultàniament, però s’executen de manera cooperativa. Quan una tasca queda en espera, el sistema pot aprofitar aquest temps per executar-ne una altra.
Aquest enfocament és especialment eficient en aplicacions amb moltes operacions d’entrada/sortida, ja que evita temps morts en l’execució del programa.
Mecanismes Al llarg del temps, s’han desenvolupat diferents mecanismes per implementar la programació asíncrona:
Callbacks: funcions que s’executen quan una operació finalitza. Promeses (promises): estructures que representen un valor futur.MDN Web Docs, Promises, https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Using_promises Futures: similars a les promeses, utilitzats en diversos llenguatges. Async/await: un model més modern que simplifica la sintaxi i la lectura del codi.
Implementacions La programació asíncrona està present en molts llenguatges de programació moderns.
En Python, es troba implementada mitjançant el mòdul asyncio, que proporciona un conjunt d’eines per gestionar tasques, temporitzadors i operacions d’entrada/sortida de manera eficient.Matthew Fowler, Python Concurrency with asyncio, Manning, 2022.
En JavaScript, la programació asíncrona forma part del model d’execució del llenguatge, basat en un sistema de promeses i en el bucle d’esdeveniments.
Altres llenguatges com C#, Java o Kotlin també disposen de mecanismes similars per gestionar operacions asíncrones.
Avantatges i limitacions La programació asíncrona permet millorar l’eficiència dels programes en evitar el bloqueig durant operacions lentes. A més, facilita la gestió de múltiples tasques simultànies dins d’un mateix procés.
Tanmateix, pot augmentar la complexitat del codi, especialment en models basats en callbacks. Encara que mecanismes com Async/await simplifiquen aquest problema, la gestió d’errors i de tasques pendents continua sent un aspecte crític.
Vegeu també Async/await bucle d'esdeveniments concurrència
Referències
Categoria:Programació