协程和线程的区别

来源:互联网 发布:c语言基本数据类型长度 编辑:程序博客网 时间:2024/04/29 14:45
  1. 栈容量, 线程默认都是2M,这个固定值对于小型的方法来说有点浪费,而对于永远大数据量的方法是远远不够的。 协程的栈初始大小是2K, 很轻便,开销不大,按需自动增长和减少栈内存。最大可以达到1GB.

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

原创粉丝点击