前言
在体验swoole的协程功能之前,需要先知道多进程,多线程和协程的区别。
多进程
典型的多进程结构就是耳熟能详的master-worker结构。swoole本身也是由master-maneger-worker-(task)组成的多进程结构。多进程将多个任务分配到不同的cpu上,从而实现同一时刻,处理多个任务。适用于cpu集型场景。
创建:fork创建子进程
通信:IPC进程间通信
开销:创建进程开销是非常大的
并发:并发能力在多进程,多线程和协程之间是最差的,通常支持数百并发
编程难度:困难,需要考虑到主-子进程之间的通信,有的情况还需要子进程之间相互通信,开发难度非常大
稳定性:较高,子进程崩溃并不会互相影响。
多线程
多线程模式通常比多进程快一点,但是也快不到哪去,而且,多线程模式致命的缺点就是任何一个线程挂掉都可能直接造成整个进程崩溃,因为所有线程共享进程的内存。
多线程和多进程最大的不同在于,多进程中,同一个变量,各自有一份拷贝存在于每个进程中,互不影响,而多线程中,所有变量都由所有线程共享,所以,任何一个变量都可以被任何一个线程修改。因此要加锁,获得锁的线程用完后一定要释放锁,否则那些苦苦等待锁的线程将永远等待下去,成为死线程。
多进程和多线程比较起来,多线程一般适用于IO密集型的任务。主要原因是因为变量存在共享内存当中,变量之间没有隔离,多线程编程需要考虑变量的变量之间的同步问题&#