千锋教育-做有情怀、有良心、有品质的职业教育机构

400-811-9990
手机站
千锋教育

千锋学习站 | 随时随地免费学

千锋教育

扫一扫进入千锋手机站

领取全套视频
千锋教育

关注千锋学习站小程序
随时随地免费学习课程

上海
  • 北京
  • 郑州
  • 武汉
  • 成都
  • 西安
  • 沈阳
  • 广州
  • 南京
  • 深圳
  • 大连
  • 青岛
  • 杭州
  • 重庆
当前位置:哈尔滨千锋IT培训  >  技术干货  >  协程和多线程有什么区别呢?

协程和多线程有什么区别呢?

来源:千锋教育
发布人:xqq
时间:2023-10-14 03:56:08

一、协程和多线程的区别

1.由于协程的特性, 适合执行大量的I/O 密集型任务, 而多线程在这方面弱于协程。

2.协程涉及到函数的切换,多多线程涉及到多线程的切换, 所以都有执行上下文, 但是协程不是被操作系统内核所管理, 而完全是由程序所控制(也就是在用户态执行), 这样带来的好处就是性能得到了很大的提升, 不会像多线程那样需要在内核态进行上下文切换来消耗资源,因此协程的开销远远小于多线程的开销。

3.同一时间, 在多核处理器的环境下, 多个多线程是可以并行的,但是运行的协程的函数却只能有一个,其他的协程的函数都被suspend, 即协程是并发的。

4.由于协程在同一个多线程中, 所以不需要用来守卫临界区段的同步性原语(primitive)比如互斥锁、信号量等,并且不需要来自操作系统的支持。

5.在协程之间的切换不需要涉及任何系统调用或任何阻塞调用。

6.通常的多线程是抢先式(即由操作系统分配执行权), 而协程是由程序分配执行权。

延伸阅读:

二、协程的原理

当出现IO阻塞的时候,由协程的调度器进行调度,通过将数据流立刻yield掉(主动让出),并且记录当前栈上的数据,阻塞完后立刻再通过线程恢复栈,并把阻塞的结果放到这个线程上去跑,这样看上去好像跟写同步代码没有任何差别,这整个流程可以称为coroutine,而跑在由coroutine负责调度的线程称为Fiber。比如Golang里的 go关键字其实就是负责开启一个Fiber,让func逻辑跑在上面。

由于协程的暂停完全由程序控制,发生在用户态上;而线程的阻塞状态是由操作系统内核来进行切换,发生在内核态上。
因此,协程的开销远远小于线程的开销,也就没有了ContextSwitch上的开销。

以上就是关于协程和多线程有什么区别的内容希望对大家有帮助。

声明:本站稿件版权均属千锋教育所有,未经许可不得擅自转载。

猜你喜欢LIKE

DevOps 是什么?

2023-10-14

蒙特卡洛模拟有哪些组成部分?

2023-10-14

物联网有哪些应用?

2023-10-14

最新文章NEW

常用的 GRC 工具有哪些作用?

2023-10-14

激活activity的方法有哪些?

2023-10-14

css预编译有哪些?

2023-10-14

相关推荐HOT

更多>>

快速通道 更多>>

最新开班信息 更多>>

网友热搜 更多>>