golang中协程和线程的区别

一般来说,协程就像轻量级的线程。

线程一般有固定的栈,有一个固定的大小。而goroutines为了避免资源浪费(亦或是资源缺乏),采用动态扩张收缩的策略:初始量为2k,最大可以扩张到1G。

每个线程都有一个id,在线程创建的时候就会被返回,所以我们可以通过线程的id来操纵线程。但是在golang中没有这个概念,因此我们在编码之初就要考虑协程的创建和释放问题。

线程和 goroutine 切换调度开销方面

线程/goroutine 切换开销方面,goroutine 远比线程小

线程:涉及模式切换(从用户态切换到内核态)、16个寄存器、PC、SP...等寄存器的刷新等。

因为协程在用户态由协程调度器完成,不需要陷入内核,这代价就小了。

所以goroutine:只有三个寄存器的值修改 - PC / SP / DX.

相关推荐:golang教程

更多相关文章

  1. golang 管道线程安全吗
  2. golang是多线程模式吗?
  3. 深入SQLite多线程的使用总结详解
  4. 关于SQLite多线程的用法详解
  5. 没想到,这么简单的线程池用法,深藏这么多坑
  6. 协作,才能更好的中断线程
  7. Node.js多线程完全指南[每日前端夜话0x43]
  8. 理解Redis单线程运行模式
  9. 代码详解Python多线程、多进程、协程

随机推荐

  1. 【Android】SDK手动下载
  2. Android(安卓)OTA 升级之三:生成recovery.
  3. Android播放器框架分析之AwesomePlayer
  4. Android资源汇总---持续整理更新中!!!
  5. Android开发常用网站
  6. android中ListView点击和里边按钮或Image
  7. AndroidMenifest.xml中minSdkVersion、ta
  8. android获取手机中的短信和,android获取
  9. js判断手机系统是android还是ios
  10. Android和JAVA面试题相关资料