协程有哪些好处?

发布于 2022-07-20 15:15:51
协程有哪些好处?

查看更多

关注者
0
被浏览
706
5 个回答
ipython
ipython 2022-07-20
This guy hasn't written anything yet

从字面上看,协程与线程、进程较为相似,对于拥有其它开发语言基础的同学容易造成困扰,以至于第一印象把协程理解成线程。

线程是操作系统能够进行运算调度的最小单位,分配算力、执行调度以线程为单位。一条线程指就是一个单一顺序的控制流。

进程是正在运行的程序的实例,是线程集合的载体,同时也是操作系统分配资源的基本单位。



线程和进程的关系,打个比方,一个应用程序就是一个进程。进程启动后,好比建立了一个工厂,线程是这个工厂中的“流水线”。一个工厂内可以有多个流水线,这些流水线可以并发生产,一条流水线出问题不会影响其它流水线。所以,进程可以有多个线程,但至少有一个主线程。

线程间可以并发执行,并共享进程资源(都使用进程的空间)。线程间有独立的栈区,但共享使用进程的堆区。

Unity中不支持多线程开发,但是却有并发的需求,使用协程来模拟多线程开发,即可并发(模拟),又可控制同步、防止阻塞。

协程是Unity机制,不具备系统普遍性,只能在MonoBehaviour下启动。 协程和线程的定义、启动流程类似,但其内部实现原理与线程不同。




------------------这里开始介绍协程-----------------------------

Unity的协程系统是基于C#的一个简单而强大的接口,简单讲就是可以把一个方法拆分成多次执行的一种接口。协程通过yiled return返回一个迭代器,记录程序执行的位置,之后进入阻塞状态,直到满足唤醒条件后,才会继续向下执行。启动多个协程后,多个协程之间不会真正的并发,而通过快速轮询模拟并发效果。

Unity在整个生命周期中构建了一个托管代码执行队列,通过生命周期管理器往这个队列中添加执行方法的委托,然后启动一个托管线程,这个线程中不断的循环获取队列中的方法委托并执行。

当开启一个迭代器(IEnumerator)后,协同程序便开始执行,在执行到yield return 之前和一般的程序没有任何区别,遇到yield return 之后立即返回,并将之后的代码挂起。之后判断yield return后边的条件是否满足,如果满足,向下继续执行,否则继续等待。

IEnumerator methodName(Object parameter1,Object parameter2,...){

// to do something

yield return Yield Instruction/other/null;

// to do something else

}

ipython
ipython 2022-07-20
This guy hasn't written anything yet

  1. 首先协程极大的优化了程序员的编程体验,并易于复用且有异步的性能
  2. 协程是轻量级线程, 协程的创建、切换、挂起、销毁全部为内存操作,消耗是非常低
  3. 可以创建很多个协程来执行任务, 适合的是 IO 密集型 应用, 因为协程在 IO阻塞 时会自动调度, 减少IO阻塞导致的时间损失.
  4. 作为世界上最好的语言PHP在IO密集处理方面一直被吐槽,但是有了Swoole就不一样了,Swoole最新版本有更为完整的协程编程支持, 直观的效果是更加无缝无感的编程切换体验, 意味着需要了解和注意的语法细节更少, 编程更轻松
  5. 使得PHP程序员不需要学习例外一门语言、也可以用PHP+Swoole实现高并发、高可用、微服务架构,即时通信等,关键还省钱解约成本,能够让用户运行真正的协程异步PHP。
  6. 在学习PHP的程序员,后期进阶中高级、架构师,Swoole协程编程、并发编程、Swoft微服务、SQL性能优化,分布式、高并发等技术都是成为一个中高级PHPer,架构师的必经之路,掌握这些比你做兼职的收入高好几倍了,为了帮助大家进阶中高级涨薪、

  1. 我为大家准备了一套精品福利!还可加入大牛学习圈子,分享tp,laravel,Swoole,Swoft微服务等教程,各种大牛都是3-8年PHP开发者,每天还有12年的架构师做讲解,助你进阶中高级PHP程序员,增值涨薪!需要可关注本头条号,并且发送私信:PHP

在学习Swoole协程编程、并发编程、进阶PHP中高级,架构师的路上有技术问题的可在底部留言,探讨技术!

ipython
ipython 2022-07-20
This guy hasn't written anything yet
《浏览器V8引擎是怎么实现生成器函数的暂停执行和恢复执行的呢?》

这背后的魔法就是协程,协程是一种比线程更加轻量级的存在。你可以把协程看成是跑在线程上的任务,一个线程上可以存在多个协程,但是在线程上同时只能执行一个协程。比如,当前执行的是 A 协程,要启动 B 协程,那么 A 协程就需要将主线程的控制权交给 B 协程,这就体现在 A 协程暂停执行,B 协程恢复执行;同样,也可以从 B 协程中启动 A 协程。通常,如果从 A 协程启动 B 协程,我们就把 A 协程称为 B 协程的父协程。

正如一个进程可以拥有多个线程一样,一个线程也可以拥有多个协程。每一时刻,该线程只能执行其中某一个协程。最重要的是,协程不是被操作系统内核所管理,而完全是由程序所控制(也就是在用户态执行)。这样带来的好处就是性能得到了很大的提升,不会像线程切换那样消耗资源。

来自《极客大学》
yydsflask
yydsflask 2022-07-20
This guy hasn't written anything yet
运动是养生保健的有力措施,具体有哪些好处呢?
“生命在于运动”这是人人都熟悉的一句话,其道理是什么呢?运动是推迟衰老、延年益寿的好方法,其好处有:
1.更好地发挥大脑机能。人体是一个完整的统一整体,一切活动都是在大脑皮层的统一支配下完成的,大脑机能状态良好,必然能更好地调节机体的多种活动,当你运动时,要自觉地运动,高高兴兴地运动,在运动时,掌握运动的主要中枢神经细胞要兴奋,而且与之有关的其他中枢神经细胞都要参与工作,相互沟通信息,根据具体情况,给有关肌肉和其他器官下达命令,采取适宜运动,可增强脑血液循环,所以运动是促使大脑皮层神经细胞活跃的方法之一。
2.预防心血管疾病。以心脏为主要的血液循环系统负有运输体内所需养料和氧气,带走废料、废气的重要使命。人的寿命长短,很大程度上取决于心脏功能的好坏。心脏本身的健康状况,与养育心肌的冠状动脉的健康状况紧密相关,通过适当的运动可使冠状动脉血流畅通,更好地供给心脏所需的营养。再者,一般认为促使冠状动脉硬化的条件是由胆固醇所致,运动可消耗体内的胆固醇和脂肪,避免动脉硬化所导致的高血压、冠心病、心血管系统的疾病等。
3.增强呼吸机能。据测定,随着人年龄的老化,人的肺活量逐渐减少,残气量增加,运动最大通气量及最大摄取量明显减少,而通过运动可以增强呼吸机能。但是,年老体弱的人运动时,容易气喘、心慌,应注意运动不能超负荷,运动要适当。
4.预防骨折。骨组织以蛋白质为主体,磷酸钙在骨组织中起承受负荷的作用,二者构成特有的坚固组织。因为磷酸钙每月以1/10的比例被代谢更换,为了及时补充,---要经常保持钙的摄取量,一要保持一定的运动量,通过肌肉活动给骨组织以刺激,促进骨组织中钙的储存。
5.控制体重。人随着年龄的衰老,活动欲望减退,能量消耗减少,身体容易肥胖,影响正常活动与生活,还能带来心、脑、血管疾病的发生。
6.有助于消化吸收。运动可以促进新陈代谢.加强肠胃功能,使其蠕动加速,食欲旺盛,避免肠胃功能下降。
7.保持肌肉的正常张力。人体正常的活动,既能促进全身组织细胞的新陈代谢,又能保证良好的血液循环。人到老年时,肌肉的机能减退并逐渐萎缩.如能坚持运动,经常给肌肉以刺激,就能延缓肌肉功能的减退与萎缩。
8.调节精神。健康的精神寓于健康的身体之中,乐观的情绪,饱满的精神,对于延年益寿有着重要的作用。体育运动就有解除精神疲劳、消除紧张焦虑情绪、有放松和调节精神的作用。
9.使皮肤柔软光泽。人体通过体育运动能增强血液循环,特别是毛细血管的血液循环,使皮肤表层的毛细血管能得到更多的养料和氧气,来供养皮下组织,皮肤能获得更多的营养,就会使皮肤柔软,富有光泽。
10.使腿脚灵便。根据测验资料表明:人的运动机能的衰退,先是平衡机能,继而是肌肉耐力,协调性,较晚的是短时间的骨肉作业能力。若以30岁时的运动能力为标准,以后每隔10 年,其能力下降10%,因此,要维持一定的体力,就必须坚持体育锻炼。锻炼应全面、要使全身的各部关节、各个脏腑﹑肌肉、神经都得到活动,只要坚持不懈、持之以恒,就一定能延缓衰老、焕发青春。
laowang
laowang 2022-07-20
This guy hasn't written anything yet
心理学上有个效应,你担心的某事会发生,它一定会发生。编程亦是如此,我感觉我写的代码有点goroutine泄露,然后它果然泄露,所以各位编程第一时间应该开pprof.在开发阶段就时不时观察协程数量,如果没有持续增加,大概率没有漏,如果持续增加,看看是哪些协程一直不退出任务,一直占着资源不放。

撰写答案

请登录后再发布答案,点击登录

发布
问题

分享
好友

手机
浏览

扫码手机浏览