协程与普通线程有哪些区别?
你以为自己什么也做不好?你错了,你还可以做好一个废物。
什么是协程?
协程是一种轻量级的线程,由用户代码来调度和管理,而不是由操作系统内核来进行调度,也就是在用户态进行。
协程与普通线程有哪些区别?
都说协程是一个轻量级的线程,协程和线程都适用于多任务的场景下,从这个角度上来说,协程与线程很相似,都有自己的上下文,可以共享全局变量。
但是也有不同之处:
1、在同一时间可以有多个线程处于运行状态,但对于 Swoole 协程来说只能有一个,其它的协程都会处于暂停的状态。
2、普通线程是抢占式的,哪个线程能得到资源由操作系统决定,而协程是协作式的,执行权由用户态自行分配。
栈大小的区别:
线程有固定的栈,基本都是2 MB,都是固定分配的,这个栈用于保存局部变量,在函数切换时使用
go语言里面的Go采用了动态扩张收缩的策略,初始化为2 KB,最大可扩张到1 GB