为什么 Java 坚持多线程不选择协程?
先说结论:协程是非常值得学习的概念,它是多任务编程的未来。但是Java全力推进这个事情的动力并不大。
先返回到问题的本源。当我们希望引入协程,我们想解决什么问题。我想不外乎下面几点:
节省资源,轻量,具体就是:
节省内存,每个线程需要分配一段栈内存,以及内核里的一些资源
节省分配线程的开销(创建和销毁线程要各做一次syscall)
节省大量线程切换带来的开销
与NIO配合实现非阻塞的编程,提高系统的吞吐
使用起来更加舒服顺畅(async+await,跑起来是异步的,但写起来感觉上是同步的)