应用多数是 IO 密集型的。就是大部分时间都花在读写、外部调用上。
同步框架靠线程在处理并发,线程切换耗费 CPU,线程本身也占资源。
异步框架,可以解决并发和性能问题。
但性能的瓶颈,更可能是出现问题的地方是存储。如何设计合理的存储结构才是问题的关键。
再然后是时间复杂度和空间复杂度。
现在的项目什么情况应该选择异步框架呢?
框架首先要能横向扩展,能横向扩展,靠堆机器,可以解决多数问题。绝大多数框架,都可以横向扩展。
之后是响应速度,速度确实重要。但多数应用对这个要求不高。多数问题,也没出在框架上。github 用 RoR 不是用的也很 happy 吗?
有的场景,确实有并发压力,比如 IM。多数的 IM 厂商都用 Erlang,但钉钉用 Java 玩的也很 high。而且,就是用了 Erlang,还是有很多问题要解决。
框架、语言和开发者的关系,就像赛车和车手的关系。想要跑的快,不仅仅要有好的赛车,还要有好的车手。
应用开发,会出现瓶颈的地方有很多,框架仅仅是其中一个。
最后,什么情况应该选择异步框架呢?
短连,同步问题不大。长连,一般用异步处理(连 RoR 的长接模块都是异步的)。
再就是,机器的钱,真的是需要考虑的因素了,对比人力成本以及运营成本而言。
再或者,本身对某个异步框架熟悉,或者处于技术好奇(别把喜好包装在各种理由之下,别总单拿性能说事,单说性能,不上量子计算,都有性能问题)。