咱们一块儿来学lua:协程(coroutine) 一

相同点:
协程跟线程很接近,可是又有区别,咱们先来看看协程跟线程同样的地方:函数运行时都会开辟本身的独立栈,局部变量和PC计数器,同时又与其余协程共享全局变量和其余大部分东西,这一点是否是跟线程很像?
不一样点:
协程和线程最主要的区别在于:多个线程能够一块儿跑,他们能够共同去竞争cpu,也就是说多个线程是能够同时并行运行的。而协程就不同了,多协程的话,只有一个协程在跑,其余协程就必须在那里等着,只有正在跑的协程主动挂起或者运行结束的时候,才轮到其余协程工做。
我在其余技术文章里面有看到,有做者提到“**多协程程序在同一时间只能运行一个协程**”把这个做为协程和线程的区别了。其实我不太同意这样的观点,可能做者本意不是这样的。可是容易引发歧义。怎么说呢,在同一时间其实真正在跑的线程也就仅仅只有一个,不可能有两个线程同时跑的。因此同一时间可以运行的协程和线程都是同样的,都只有一个在跑。那他们的真正区别是什么呢?这里可能须要引入cpu轮转抢占去说明可能更合适一些。稍微懂点操做系统的童鞋应该都知道。cpu会有一个时间片,每个时间内都只会有一个线程在运行,其余线程都会放在等待队列里面,等待翻牌子。当这个时间片时间一结束,正在运行的线程就会从cpu这个皇帝的床上退出来,退回到其余线程的等待队列中,从新竞选翻牌子,皇帝翻到谁的牌子,哪一个线程就可以跟cpu宠幸,而后等到时间片时间到了,新的一轮翻牌子又要开始了。。。
协程这个妃子就不同了,她但是有脾气的。皇帝你翻我牌子了,就要跟妃子我好好过,我没休息没来大姨妈以前,都不准皇帝碰其余妃子,就算时间片时间到了,也不容许换妃子。。。嗯,就是这么有个性~~~~
举了个皇帝翻牌子的例子,不知道你们有没有看懂呢?
性能对比:
协程是在纯用户态下执行的,它的建立和切换的开销,要远远小于线程。因此单从性能上来说协程是要优于线程的。
结束语:
第一次写博客,写的不对的地方,但愿你们可以指正,下一期咱们就来说下协程的具体用法,敬请期待~~~~