认识php线程、进程、协程

认识php线程、进程、协程

1,什么是进程

进程,是保存在硬盘上的程序,运行以后会在内存空间里形成一个独立的内存体,这个内存体有自己独立的地址空间,有自己的堆,上级挂靠单位是操作系统。操作系统会以进程为单位,分配系统资源(CPU时间片、内存等资源),进程是资源分配的最小单位。

2,什么是线程

线程,被称为轻量级进程,是程序执行流的最小单位,线程是进程中的一个实体,是被系统独立调度和分派的基本单位。

线程自己基本上不拥有系统资源,只拥有一点在运行中必不可少的资源(如程序计数器,一组寄存器和栈),但是它可与同属一个进程的其他的线程共享进程所拥有的全部资源(几个词概括:轻量级的、实体、进程之中、最小单位);

3,协程

协程与子进程(某个主程序的一部分代码)一样,协程也是一种程序组件。
协程(coroutine)不是进程或线程,其执行过程更类似于子进程,或者说不带返回值的函数调用。
一个程序可以包含多个协程,对比一个进程可以包含多个线程,多个线程相对独立,有自己的上下文,切换受系统控制;协程也相对独立,有自己的上下文,但切换由自己控制,从当前协程切换到其它协程由当前协程来控制。

4、进程优点:

  1. 进程有独立的地址空间,一个进程崩溃后,在保护模式下不会对其它进程产生影响

进程缺点:在创建或撤消进程时,由于系统都要为之分配和回收资源,导致系统的开销明显大于创建或撤消线程时的开销。多进程的程序要比多线程的程序健壮,但在进程创建、切换、撤销时,耗费资源较大,效率要差一些。

进程间通信(IPC)较为复杂和耗时

5、线程优点:

线程的出现是为了减少任务切换的消耗,提高系统的并发性,实现让一个进程也能执行多个任务

线程缺点:

线程只是一个进程中的不同执行路径。线程有自己的堆栈和局部变量,但线程之间没有单独的地址空间,一个进程死掉就等于所有的线程死掉

线程没有自己的系统资源,只有运行时不可缺少的资源,但是同一进程的各线程可以共享进程所拥有的系统资源。对于某些独占资源存在锁机制,处理不当会出现死锁。

6、协程优点:

协程执行效率高。因为子程序切换不是线程切换,由程序自身控制,避免了陷入内核级别的上下文切换造成的性能损失,进而突破了线程在IO上的性能瓶颈。

协程不需要多线程的锁机制。在协程中控制共享资源不加锁,只需要判断状态就好,所以执行效率比多线程高很多。

你可能感兴趣的:(php专栏,java,jvm,开发语言)