1 多进程

多进程是在操作系统层面进行并发的基本模式。同时也是开销最大的模式。在Linux平台上,很多工具链正是采用这种模式在工作。
比如某个Web服务器,它会有专门的进程负责网络端口的监听和链接管理,还会有专门的进程负责事务和运算。
这种方法的好处在于简单、进程间互不影响,坏处在于系统开销大,因为所有的进程都是由内核管理的。

2 多线程

多线程在大部分操作系统上都属于系统层面的并发模式,也是我们使用最多的最有效的一种模式。
目前,我们所见的几乎所有工具链都会使用这种模式。它比多进程的开销小很多,但是其开销依旧比较大,
且在高并发模式下,效率会有影响。

3 协程

协程(Coroutine)本质上是一种用户态线程,不需要操作系统来进行抢占式调度,且在真正的实现中寄存于线程中,因此,系统开销极小,可以有效提高线程的任务并发性,而避免多线程的缺点。
使用协程的优点是编程简单,结构清晰;缺点是需要语言的支持,如果不支持,则需要用户在程序中自行实现调度器。
目前,原生支持协程的语言还很少。
在Java中, 一个线程 stack默认是1M,
而Goroutine的stack大小为2K

4 基于回调的非阻塞/异步IO

高并发下, 使用多线程模式会很快耗尽服务器的内存和CPU资源
而这种模式通过事件驱动的方式使用异步IO,使服务器持续运转,且尽可能地少用线程,降低开销