协程与普通线程有哪些区别?

你以为自己什么也做不好?你错了,你还可以做好一个废物。

 

什么是协程?

协程是一种轻量级的线程,由用户代码来调度和管理,而不是由操作系统内核来进行调度,也就是在用户态进行。

 

协程与普通线程有哪些区别?

都说协程是一个轻量级的线程,协程和线程都适用于多任务的场景下,从这个角度上来说,协程与线程很相似,都有自己的上下文,可以共享全局变量。

但是也有不同之处:

1、在同一时间可以有多个线程处于运行状态,但对于 Swoole 协程来说只能有一个,其它的协程都会处于暂停的状态。

2、普通线程是抢占式的,哪个线程能得到资源由操作系统决定,而协程是协作式的,执行权由用户态自行分配。

 

栈大小的区别:

线程有固定的栈,基本都是2 MB,都是固定分配的,这个栈用于保存局部变量,在函数切换时使用

go语言里面的Go采用了动态扩张收缩的策略,初始化为2 KB,最大可扩张到1 GB

posted @ 2022-07-25 09:03  方达达  阅读(21)  评论(0编辑  收藏  举报