goroutine陷入阻塞后,也会有保存现场和恢复现场,他比多线程的优势到底在哪
“但是他阻塞后对应处理的线程也会阻塞,“所以一开始用的api就需要是非阻塞的,对于legacy阻塞的api,要想兼容的话,就只能牺牲线程了,这就是在vert.x里面我们使用coroutine等非常自然的原因,因为本身api都是non blocking的,套上去就能用
goroutine非常轻量级目前看,其它语言只是还没有把协程给做出来而已,已经做出来的,比如kotlin的coroutine,都比goroutine要清凉,java的project loom还没有完成,但是从已经公开的一些视频和资料看,也比goroutine要清凉,v8的async/await没有比较过,但是应该也比goroutine要清凉,实际上stackless怎么都比stackful要清凉一些,哪怕是stackful,goroutine的实现也算是比较重量级的了,目前看,stackful这条线只有java和ruby可能会走,其它语言都是stackless,包括kotlin和js/emcascript,而stackful里面java的实现估计会比goroutine要清凉,但是这个只是猜测,基于已经有的quasar的猜测,但是毕竟还没有完成,所以不好对比,等loom完成后再说,而且loom claim说能够兼容legacy api,我一直在琢磨,他们会怎么来兼容这些blocking的api,似乎他们的意思是说,可以不牺牲线程直接兼容,有一种可能是直接把jvm的io部分实现给改了,但是暴露出来的api不变,这样就不用用户修改代码也能用上non blocking的好处了,但是这就只能等他们把东西做出来之后再看了
一些reference,stackless的效率要超过stackful
How do stackless coroutines differ from stackful coroutines?https://github.com/Kotlin/kotlin-coroutines/issues/35Why we are going with stack-less continuations · Issue #35 · Kotlin/kotlin-coroutinesWhy we are going with stack-less continuations · Issue #35 · Kotlin/kotlin-coroutinesgo是这个领域是先行者,这个技术已经快烂大街了,什么语言都开始搞了,你能想到的语言几乎都在做这事,而go的实现正好做了其它语言的小白鼠,其它语言抄起来那叫一个欢快,开源不就是互相抄么?
■网友
多线程是适合IO密集任务的,一个线程(nodejs redis)都能搞,多个线程怎么可能反而不合适了呢?直接的原因是,单线程使用异步IO,但是代码比较捉急,于是大家用多线程来搞,代码好看点,但是性能多数时候差点意思。但其实多线程中,每个线程也可以异步IO啊,这一点go已经帮你搞了。go中一个线程对应M个goroutine,每当线程遇到syscall之类的,runtime就让它接着执行别的goroutine,等syscall返回了,再找机会恢复之前goroutine的执行。所以事实上,你可以设置go最多起多少个线程,来执行“无数”的goroutine。
■网友
开头地一句就让我蒙蔽了
“多线程不适合处理io密集型”
还有这说法么……
io密集型主要是靠异步来解决阻塞问题的。
【goroutine陷入阻塞后,也会有保存现场和恢复现场,他比多线程的优势到底在哪】 我的理解里,go的协程本身就是建立在多线程上的提供的一个更易于使用和轻量级的工具,多线程无法规避的问题,用协程也很难规避。
可以参考这个
Golang 的 goroutine 是如何实现的?
■网友
goroutine不是和线程一一对应的。goroutine近似于协程,一个线程对应多个协程。当一个协程阻塞后,线程会自动调度执行其他非阻塞协程。与一般协程1对n的区别是,为了更好的支持多核,goroutine是m对n的关系,即m个线程调度n个协程,一般n是远大于m的。
推荐阅读
- |男子抓鱼,陷入淤泥被困5个多小时
- 孩子|中毒休克险丧命!更可怕的是,孩子陷入危险的时候,父母却浑然不知6岁男孩发烧后吃这个
- 谢玲玲|无线艺人陷入恐慌!高层夫妻被确诊,与谢玲玲汪明荃有过接触
- 肖战|王一博之后,肖战也陷入养号丑闻,汪海林:热衷打分太愚蠢
- 隐马尔科夫模型中,隐藏状态会不会陷入了黑洞,停留在一个状态不出来了
- 西安一半挂车突发大火,33吨煤陷入火海!起火原因竟是......警惕!
- 广汽传祺GS4|核心车型崩盘!广汽传祺为何陷入销量窘境?
- 望城一女子陷入“杀猪盘”被骗18万余元,“杀猪盘”高频话术有哪些?
- 车经社|进化论的观点:传统车企难以自拔,皆因陷入“单性繁殖”的怪圈?
- 平台■男子陷入“杀猪盘”意外牵出一“养号”平台:两亿社交软件号码可随意买卖
