python进程线程协程,进程,线程,协程间的区别和联系
关于进程、线程、协同学都有非常详细丰富的博客或学习资源,这里就不赘述了。我在这里简单介绍一下这些东西。
1.进程有自己独立的堆和栈,既不共享堆也不共享栈,进程由操作系统调度。
2.线程有自己的独立栈和共享栈,共享栈和非共享栈。线程也由操作系统调度(标准线程是)。
3.协同学像线程一样共享堆,但不共享栈。协同学是程序员用协同学的代码展示出来的。
Yield,PHP协同实现的基础
yield的基本实现是generator类,而iterator类是iterator接口的实现:
GeneratorimplementsIterator {
Publicmixedcurrent(void) //返回当前生成的值
Publicmixedkey(void) //返回当前生成的密钥。
public next(void)//生成器继续执行
public rewind(void)//重置迭代器。如果迭代已经开始,这里将抛出一个异常。
renwind的执行会导致第一个yield被执行,其返回值被忽略。
Publicmixedsend(mixed$value) //向生成器传入一个值,将其作为yield表达式的结果,然后继续执行生成器。如果调用此方法,生成器
//不在yield表达式中,则它将在传入值之前运行到第一个yield表达式。
public Throw(exception $ exception)//向生成器中抛出一个异常
Publicboolvalid(void) //检查迭代器是否关闭。
public _ _ wake up(void)//序列化回调,抛出异常指示生成器无法序列化。
}
以上分析可以参考PHP官方文档。
http://php.net/manual/zh/clas.
还有这个鸟哥翻译的详细文档:
http://www.laruence.com/2015/.
我就基于他的协同多任务调度举例,谈谈我对拥塞的思考。
自定义计划执行任务的示例:
(这个例子必须依赖上面鸟哥实现的协同调度代码)
班级计时器{
private $ start=0;//计时开始时间
private $ timer//间隔的时间差,以秒为单位
private $ value=0;//产生的结果值
私有$回调;//异步回调
private $ isEnd=false//当前定时器任务完成了吗?
公共函数__construct($timer,callable $callback)
{
$ this-start=time();
$ this-timer=$ timer;
$ this-callback=$ callback;
}
公共函数run() {
if($this- valid()) {
$ callback=$ this-callback;
$callback($this- value,$ this);
$ this-start=time();
}
}
/**
*定期检查。
*/
公共函数valid() {
$end
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。