首页 > Swoole扩展 > 为什么选择swoole?

为什么选择swoole?

Golang

golang很不错,性能好,开发效率高。协程+通道既解决了异步IO,又解决了并行问题。但Go目前存在gc和协程调度的问题,Java之类语言花了近20年的时间来完善GC,GO估计3-5年之内很难解决。同样node.js也存在此问题。

gc问题:golang和node.js都是定期进行全局gc,当发生gc时,所有代码都停止运行。如果内存申请释放很复杂,需要很长的时间才能处理完毕。程序会发生周期性卡顿。
协程调度:golang是编译为机器码执行的,如果某个协程占用的cpu时间过长,其他协程会得不到执行。这和erlang不同,erlang是运行在VM之上的,VM可以自己进行调度。机器码调度只能靠CPU中断,而且一般只有操作系统有调度的权力。Golang中只能依赖手工在代码中加入Yield(),转让CPU时间片。

Node.js

单进程单线程,全异步,性能很好。但应用层不能有阻塞,需要写大量嵌套回调才能实现业务逻辑。开发者心智负担太高。随着业务代码增加,开发和维护越来越困难。

Erlang

erlang也是协程+通道,和golang相同。Erlang确实是网络编程的终极方案,而且erlang是基于VM执行的,不存在golang的2个问题。erlang是函数式编程,比较难入门,开发效率不高。

php+libevent

libevent只是一个事件轮询的库,epoll的封装。libevent过于底层,不是整套方案,你需要自行写大量底层代码。维护成本很高,另外一旦出了问题,你需要非常熟悉libevent才能解决。

Swoole

swoole与node.js/react之类不同的是,swoole是整体方案。从性能、异步、并行、可维护性、开发效率方面综合考虑的。swoole中你可以同步,也可以异步。代码中可以有阻塞,通过多开进程来调整处理能力。

既保证性能,又保证开发效率。

分类: Swoole扩展 标签: