进程、线程、协程

进程

是计算机进行资源分配和调度的独立单位

每个进程都有自己的独立的空间

进程间通信方式:管道通信、消息队列、信号量机制、共享内存、套接字通信等

由于进程占据独立的内存空间,所以进程的切换消耗比较大,但相对稳定安全

线程

线程是进程的一个实体,是cpu调度和分派的基本单位,基本不占用内存资源,只有一点必不可少的运行资源

通信方式是:共享内存

因为所占内存空间小,所以切换很快,但不稳定,易丢失数据

协程

协程是一种用户态的轻量级线程,拥有自己的寄存器上下文和栈,协程调度切换时,将寄存器上下文和栈保存在其他地方,再切回来的时候,回复先前的寄存器上下文和栈

切换的时机由用户/编程者来进行控制,切换的人也不是操作系统是用户/编程者(进程和线程的切换者都是操作系统)

协程能够保留上一次调用的时候的状态,每次过程重入时,相当于进入上一次调用的状态也就是说

进入上一次离开时所处逻辑流的位置

协程表示一个执行单元,有自己的本地数据,与其他协程共享全局数据和其他资源

 

我们的代码跑在线程中的,而线程是跑在进程中的

协程没有直接和操作系统关联,但他是跑在线程中的,可以是单线程,也可以是多线程

线程进程都是同步机制,而协程则是异步

(一个线程内的多个协程的运行是串行的)

无栈协程:因为没有自己的栈,只有自己的桢

有栈协程:有自己栈 ~有点废话

 

协程优点

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

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

3、方便切换控制流

4、高并发低成本

 

协程使用一般是解决   I/O阻塞   

(为什么线程不能解决:   因为一个IO操作就阻塞了当前线程,导致其他代码无法执行,所以我们必须使用多线程或者多进程来并发执行代码,为多个用户服务。每个用户都会分配一个线程,如果遇到IO导致线程被挂起,其他用户的线程不受影响。

多线程和多进程的模型虽然解决了并发问题,但是系统不能无上限地增加线程。由于系统切换线程的开销也很大,所以,一旦线程数量过多,CPU的时间就花在线程切换上了,真正运行代码的时间就少了,结果导致性能严重下降。)

因为当一个I/O阻塞时,它可以切换到其他没有阻塞的协程上去继续执行,这样就有了比较高的效率

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值