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



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

  

user avatar   pansz 网友的相关建议: 
      

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

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

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

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

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

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




  

相关话题

  腾讯开源的 libco 号称千万级协程支持,那个共享栈模式原理是什么? 
  阻塞/非阻塞、同步/异步还有并发、并行、分布式这些概念的区别是什么?分别适用于哪些编程场景? 
  对同一个套接字,在两个线程中都对其调用recv函数,需要对其互斥保护吗? 
  阻塞/非阻塞、同步/异步还有并发、并行、分布式这些概念的区别是什么?分别适用于哪些编程场景? 
  C++ 中,std::atomic 是真正的「原子」吗? 
  semaphore和mutex的区别? 
  如何评价 AMD 线程撕裂者 3990X? 
  semaphore和mutex的区别? 
  如何评价call_in_stack这个库? 
  如何评价 AMD 线程撕裂者 3990X? 

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





© 2024-07-03 - tinynew.org. All Rights Reserved.
© 2024-07-03 - tinynew.org. 保留所有权利