进程,线程,协程

这是我对这几个程的认识,会不断刷新认知。

进程和线程

  • 一个进程,即对应任务管理器一条process

  • 一个应用程序至少会开启一个进程<也有多进程,点开Chrome就知道了>

  • 而一个进程至少有一个线程,线程间共享该进程的资源。

  • 线程是一个执行流,是CPU调度基本单位<意味着咱可以为了抢CPU的服务,启多线程>

  • 但是多线程是为了同步完成多项任务,不是为了提高运行效率,而是为了提高资源使用效率来提高系统的效率(这个我没理解到,感觉还是为了运行效率)。线程是在同一时间需要完成多项任务的时候实现的。

  比喻<来自:http://www.cnblogs.com/Autumoon/archive/2008/06/19/1225684.html>:  假设一家搬家公司。假如我们把公司看做是一个进程,那么人就是其中的线程。进程必须得有一个主线程,公司在创业初期往往可能出现一人打天下的现象,但是,至少得有一个人,公司才能运作。公司创业初期,业务还不算太多,往往就是老板一个人身兼数职,一天如果只有1、2趟活儿,应该还是忙得过来的。时间长了,随着业务的发展、口碑的建立,生意越来越兴隆,一个人肯定就忙不过来了。假设一天有5个活儿,老板一个人必须搬完A家才能搬B家,搬到黄昏估计也就搬到C家,D和E家都还在焦急地等待着呢。老板一个人要充当搬运工、司机、业务联系人、法人代表、出纳等众多角色,累死累活公司的规模也上不去,人手不够制约了公司的发展。那么怎么办,很简单,增加人手,用编程的话来说就是“再起个线程”。

协程

前提,我得提一下函数的调用(j_0060.gif回到这么基础了)。我们都知道A函数调用B函数,会事先保存现场,A函数入栈。B函数执行完后,A函数出栈,继续进下去。

  • 协程不是线程,线程是由CPU调度,协程是程序员自己调度。

  • 协程打破函数的执行顺序,让子程(函数)间--“协同战”。

  • yield开始,当前点上下文保存,主动让出CPU(当前线程不一定马上挂起哈,当前现场被保存,暂时返回,线程其它顺序流继续执行完,真正让出cpu),CPU再次调度到当前线程,线程会检查所有协程保存点(unity是在每帧update之后),检查yeild条件是否满足,若满足,回到现场,继续未完成的工作。不满足继续离开。


下图是我对线程中协程的理解:

spacer.gifwKioL1PaVRqh1VNeAAGqdKk4RuA819.jpg


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章