¿Cuáles son las ventajas de Swoole sobre Node.js? ¿Cuáles son algunos casos de Swoole conocidos?
Paralelismo multinúcleo
El bucle de eventos de node.js es de un solo proceso y de un solo subproceso, y solo se ejecuta un sondeo de eventos epoll/kqueue. Por lo tanto, no se pueden aprovechar las ventajas informáticas del multinúcleo.
El bucle de eventos de Swoole es multiproceso y se basa en el modelo Multi-Reactor de epoll/kqueue. Esto es lo mismo que nginx/golang. Además, no hay bloqueos entre los reactores multiproceso de swoole, lo cual es diferente de nginx. Habilita un hilo de aceptación dedicado, similar al netty de JAVA.
Entonces, en una máquina con CPU de múltiples núcleos, la capacidad de node.js para manejar eventos de E/S de red es definitivamente varias veces peor que la de swoole. En una máquina de 4 núcleos, es necesario verificar al menos 2-3. veces.
Aunque node.js también proporciona extensiones multiproceso, el kernel debe proporcionar event_loop y las extensiones no.
Además, supongo que no es un problema técnico si node.js se transformará en un Reactor multiproceso en el futuro. Pero una vez que se cambia a Reactor multiproceso, es posible que node.js ya no sea node.js. Después de perder las diversas ventajas del hilo único original, será inútil. Por supuesto, tal vez el equipo de desarrollo oficial de node.js encuentre una forma inteligente de resolver el problema, pero todo será una historia más adelante.
No solo event_loop, sino también la ejecución de código a nivel de usuario es de un solo subproceso y no puede aprovechar la computación de múltiples núcleos. Los usuarios deben bifurcar múltiples procesos o crear un grupo de subprocesos por sí mismos. La dificultad de uso ha aumentado mucho. A diferencia de swoole, solo necesita configurar los parámetros y, naturalmente, es multiproceso.
IO de red asíncrona
Node.js y swoole son IO sin bloqueo totalmente asíncronos basados en epoll/kqueue, por lo que son similares en este sentido y no hay diferencia. La capacidad de mantener conexiones TCP largas es la misma.
Una ventaja que tiene node.js aquí es que es compatible con Windows IOCP. swoole solo admite epoll/kqueue de Linux/FreeBSD/MacOS.
Lectura y escritura de archivos asincrónica
Tanto node.js como swoole proporcionan lectura y escritura de archivos asincrónica y consulta DNS basada en subprocesos. piscina. Node.js se implementó por primera vez en base a libeio y luego implementó su propio grupo de subprocesos. Swoole se diseñó basándose en el grupo de subprocesos desde el principio.
De hecho, esto se simula mediante el bloqueo de subprocesos múltiples y no es una lectura y escritura asincrónica real de archivos. Por ejemplo, al leer y escribir cientos de archivos al mismo tiempo, el rendimiento es muy inferior al de los programas PHP multiproceso normales.
Swoole también brinda soporte para Linux Native AIO, que es una verdadera lectura y escritura de archivos paralelos asíncronos a nivel de kernel, pero debe modificarse mediante conmutadores de macros y recompilarse antes de poder usarse.
Conclusión final
Node.js no tiene ninguna ventaja obvia sobre swoole, excepto que es mejor que swoole en términos de compatibilidad con Windows. Algunas funciones de node.js están disponibles en swoole. Personalmente, creo que la mayor ventaja de Node.js es:
node.js usa el lenguaje JavaScript, que está muy integrado con los navegadores y HTML. Utiliza el mismo lenguaje para escribir tanto en el front-end como en el back-end. end
p>Compatible con la plataforma Windows, usando node-webkit, puede desarrollar software cliente para PC
El posicionamiento de node.js debe ser un escenario de aplicación donde el front-end y el back-end -End están muy estrechamente integrados. Como websocket push, JSON-RPC, interfaz HTTP ligera.
Para campos back-end y sistemas distribuidos verdaderamente profesionales, node.js no es adecuado.