百科问答小站 logo
百科问答小站 font logo



有了线程,为什么还要有协程? 第1页

  

user avatar   pansz 网友的相关建议: 
      

首先解释:协程是非抢占式多任务,线程是抢占式多任务。

协程需要编写代码者主动让出控制权,而线程可以无需规划让出控制权的时间点。

协程哪怕没有操作系统干预也可以实现,毕竟任何编程语言自身就能够实现这个结构。早期的多任务大多来自于此。所以协程肯定是早于线程出现的。

最初,抢占式多任务的发明是一个feature,不需要考虑程序在何处被插入,就可以自动的实现多任务。很多人觉得这很方便。

然而后来,线程的弊端慢慢显现,一方面是程序不知道在什么时间点会被抢走焦点因此无法更有效的规划数据访问,二方面是线程需要有额外开销,有大量并行任务时不适合使用线程,例如C10K问题需要在短时间内响应一万个请求,而当时的系统尚不能有效处理一万个线程。

于是,协程重新回到了程序员的视线。因为一方面,协程代码中所有让出控制权的结点都是已知的,不会存在多线程同步方面的相关问题。二方面,协程的开销非常小,成千上万个协程并发也完全没问题。




  

相关话题

  可不可以近似认为,同步就是单线程,异步就是多线程? 
  关于go语言协程调度的一个问题(具体请看问题描述)? 
  android主线程如何保证获取足够的时间片? 
  可不可以近似认为,同步就是单线程,异步就是多线程? 
  腾讯开源的 libco 号称千万级协程支持,那个共享栈模式原理是什么? 
  多核cpu多线程同时执行cmpxchg指令会发生什么? 
  有了线程,为什么还要有协程? 
  英特尔新一代奔腾 G7400 上架,10nm 双核四线程,该款产品都有哪些亮点值得关注? 
  Java中,有一个for循环调用网络api很耗时,请问如何减少耗时? 
  为什么编译器过度优化导致线程安全问题? 

前一个讨论
为什么二代身份证如此重要的物件,丢失后无法挂失身份证号,公安部当初设计时就想不到吗?
下一个讨论
即将毕业,从事C++开发,笔记本推荐?





© 2024-11-21 - tinynew.org. All Rights Reserved.
© 2024-11-21 - tinynew.org. 保留所有权利