进程, 线程和协程

进程:

程序并不能单独运行,只有将程序装载到内存中,系统为它分配资源才能运行,而这种执行的程序就称之为进程。

(程序以一个整体的形式暴露给操作系统。里面包含对各种资源的调用,内存的管理,网络接口的调用等,即对各种资源管理的集合)

程序和进程的区别就在于:程序是指令的集合,它是进程运行的静态描述文本;进程是程序的一次执行活动,属于动态概念。

启动一个进程会自动启动一个线程,进程里的第一个线程就是主线程,主线程可以创建子线程

线程:

线程是操作系统能够进行运算调度的最小单位,是一串指令的集合。

它被包含在进程之中,是进程中的实际运作单位。

一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务

进程要操作cpu,至少创建一个线程

所有在同一个进程里的线程共享同一块内存空间

区别:

线程共享内存空间,进程内存是独立的

多个线程可以直接访问同一个进程的数据,多个子进程之间数据是相互独立的

同一个进程的线程之间可以直接交流,两个进程想通信必须通过一个中间代理来实现

创建新的线程很简单,创建新的进程需要对其父进程进行一次克隆

一个线程可以控制和操作同一进程里的其他线程,但是进程只能操作子进程

对于主线程的修改有可能会影响到其他线程的运行,但是对一个父进程的修改不会影响其他子进程

协程

协程,又称微线程,纤程。英文名Coroutine。一句话说明什么是线程:协程是一种用户态的轻量级线程(CUP根本不知道他的存在)

协程拥有自己的寄存器上下文和栈。协程调度切换时,将寄存器上下文和栈保存到其他地方,在切回来的时候,恢复先前保存的寄存器上下文和栈。

优点:

无需线程上下文切换的开销

无需原子操作锁定及同步的开销

方便切换控制流,简化编程模型

高并发+高扩展性+低成本:一个CPU支持上万的协程都不是问题。所以很适合用于高并发处理。

缺点:

无法利用多核资源:协程的本质是个单线程,它不能同时将 单个CPU 的多个核用上,协程需要和进程配合才能运行在多CPU上.当然我们日常所编写的绝大部分应用都没有这个必要,除非是cpu密集型应用。

进程阻塞(Blocking)操作(如IO时)会阻塞掉整个程序

协程一个标准定义:

1、必须在只有一个单线程里实现并发

2、修改共享数据不需加锁

3、用户程序里自己保存多个控制流的上下文栈

4、一个协程遇到IO操作自动切换到其它协程

你可能感兴趣的:(进程, 线程和协程)