协程和线程的区别

  1. 栈容量, 线程默认都是2M,这个固定值对于小型的方法来说有点浪费,而对于永远大数据量的方法是远远不够的。 协程的栈初始大小是2K, 很轻便,开销不大,按需自动增长和减少栈内存。最大可以达到1GB.

  2. 调度问题。 线程的调度是由内核调度器来调度的,内核调度器每隔几毫秒进行调度,终止当前线程,保存其状态,然后切换到另一个线程。这样的一次操作叫做线程的上下文切换,意思就是把当前线程的状态保存在内存中,然后把另一个线程从内存中恢复回来。这个过程是比较耗时的。
    在go里面,她的运行时环境会调度m个协程到n个OS线程,这种方法叫做m:n scheduling。
    并且她把协程的调度权转给了程序本身,也就是说写程序的我们可以自己去控制协程的阻塞和销毁。
    这样就免去了把协程保存在内存(切换到内核态), 效率大大提升了。可以说协程是用户态的线程。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值