PHP Asíncrono, sin morir en el intento (Parte 1)

Una vez vi en instagram una publicación entusiasta sobre la arquitectura de software asíncrona, la imagen era la siguiente:

Untitled design

Me pareció una buena comparación, además de que en ese momento me encontraba aprendiendo y escribiendo código javascript en NodeJS que era un esquema totalmente nuevo para mí.

Todo el core de NodeJS y todo el hype que empezó hace ya un tiempo en las comunidades de desarrollo se debe particularmente a este concepto.

Ahora bien, ¿Es un concepto exclusivo de NodeJS?, ¿Podemos simular o implementar procesos asíncronos en otros lenguajes? En este artículo nos centraremos en un lenguaje muy popular de de desarrollo backend : PHP

PHP es un lenguaje que fue lanzado en 1995 y hasta el día de hoy su evolución ha sido increíble, al punto de ser uno de los lenguajes más usados en toda la web, aún siendo criticado por muchos desarrolladores.

Ahora bien,  ¿Cómo implementar estos conceptos de tareas non-blocking en PHP? ¿Es posible?

Si la imagen de más arriba tiene razón y la arquitectura asíncrona/computación en paralelo es el futuro, es conveniente conocer las respuestas a estas preguntas.

En la primera parte de este post trataremos de aclarar algunos conceptos antes de llegar a las implementaciones técnicas. Empecemos.

Async NO es Threading

Así es, no debemos confundirnos. Ambos son modelos para manejar concurrencia pero tienen características bien definidas. Conozcamos la diferencia

Threading : 

captura-de-pantalla-de-2017-01-13-101200

En este modelo, cada tarea es ejecutada verdaderamente de forma concurrente. Cada tarea ocupa un proceso del sistema operativo y las tareas son ejecutadas al mismo tiempo a través del tiempo.

El punto es que, en el modelo de threading, los detalles de la ejecución son manejados por el sistema operativo y el programador siempre lo pensará en términos de instrucciones independientes que puedan ejecutarse de manera simultánea. A pesar de que el diagrama es simple, en la práctica los programas con threads suelen ser algo complejos por la necesidad de coordinar el funcionamiento de los threads en conjunto. La programación de comunicación entre threads en un sistema operativo es un tema complejo de programar, y es aplicable normalmente a procesos internos y no a aplicaciones webs sencillas

Modelo Asíncrono

captura-de-pantalla-de-2017-01-13-101223

 

En este modelo, las tareas son intercaladas las unas con las otras, pero en un sólo hilo(thread) de ejecución. Sin embargo, los eventos asíncronos ocurren independientes del flujo del programa principal. Las acciones asíncronas son ejecutadas en un esquema no-bloqueante, permitiendo que el programa principal siga procesando. ¿Cómo es posible esto?, el modelo asíncrono maneja eventos que permiten escuchar cuando una tarea asíncrona termina y ejecutar algún proceso según el resultado, eso es lo que da la sensación de concurrencia.

No hay una única solución y todo dependerá de lo que realmente necesitemos, en PHP tenemos diferentes “workarounds” y formas de aplicar este patrón. Es importante saber además el cuándo realmente necesitamos diseñar software que se comporte de forma asíncrona, recordemos que la solución más simple, suele ser la mejor.

En la siguiente parte de este post nos enfocaremos más en conocer a nivel técnico cómo programar código PHP asíncrono y que patrones de diseño podemos aplicar para hacer nuestra aplicación se comporte como “el mundo real” con “interacciones coordinadas, pero asíncronas”.

Anuncios

3 Comentarios Agrega el tuyo

  1. Es decir, que, ¿es similar a la concurrencia? ¿O hay diferencia a eso?

    Me gusta

    1. rafaelbecks dice:

      La programación asíncrona es una forma de gestionar la concurrencia

      Me gusta

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s