python进程线程协程,进程,线程,协程间的区别和联系

  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的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: