1. 什么是ticks


我们来看一下手冊上面对ticks的解释:

A tick is an event that occurs for every N low-level statements executed by the parser within the declare block. The value for N is specified using ticks=N within the declare block's directive section.

总结一下:

  • tick是一个事件
  • tick事件在每运行N条low-level statements就会放生一次,N由declare语句指定
  • 能够用register_tick_function()来指定时间的handler,unregister_tick_function()与之相应
至于什么是low-level statements。在此不做展开,总结来说,low-level statements包含下面几种情况:
(1)简单语句:空语句(一个。号)。return, break, continue, throw, goto, global, static, unset, echo, 内置的HTML文本。分号结束的表达式等均算一个语句。
(2)复合语句:完整的if、elseif, while, do...while, for, foreach, switch, try...catch等算一个语句
(3)语句块:{}大括号算一个语句块
(4)declare本身算一个复合语句

全部的statement, function_declare_statement, class_declare_statement构成了low-level statement.

2. tick的坑

一定要注意的一点是:declare()不是一个函数!!。准确的说,他是说一个语言结构。因此可能会有一些你意想不到的行为。比方说,当你在一个文件其中多次用到declare()时,其解析的原则是:谁在我前面而且理我近期我就用谁,全然无视你的代码逻辑。这里不做展开。一个建议的使用方法是

declare(ticks=10){for($i = 0; $i < 20; $i++){print "hello\n";}
}declare(ticks=2){for($i = 0; $i < 20; $i++){print "hello\n";}
}

3. tick的应用

说了这么多,我们究竟什么时候会用到tick呢?一般来说,tick能够用作调试,性能測试,实现简单地多任务或者做后台的I/O操作等等。

这边举一个鸟哥提供的范例,用于完毕通信

<?php/** 利用ticks来完毕消息通信*///create a message queue
$mesg_key = ftok(__FILE__, 'm');
$mesg_id = msg_get_queue($mesg_key, 0666);//ticks callback
function fetchMessage($mesg_id) {if (!is_resource($mesg_id)) {print_r("Mesg Queue is not Ready \n");}if (msg_receive($mesg_id, 0, $mesg_type, 1024, $mesg, false, MSG_IPC_NOWAIT)) {print_r("Process got a new incoming MSG: $mesg \n");}
}//register ticks callback
register_tick_function("fetchMessage", $mesg_id);//send messages;
declare(ticks = 2) {$i = 0;while (++$i < 100) {if ($i % 5 == 0) {msg_send($mesg_id, 1, "Hi: Now Index is :" . $i);}}
}

我们来看一下输出:

我们发现,因为注冊了tick事件的callback,每经过两个statements都会触发tick事件。从而运行了从消息队列其中取消息的操作。这样就模拟了消息的发送和接收的过程。

转载于:https://www.cnblogs.com/jhcelue/p/7019241.html

【php学习笔记】ticks篇相关推荐

  1. R语言学习笔记——入门篇:第三章-图形初阶

    R语言 R语言学习笔记--入门篇:第三章-图形初阶 文章目录 R语言 一.使用图形 1.1.基础绘图函数:plot( ) 1.2.图形控制函数:dev( ) 补充--直方图函数:hist( ) 补充- ...

  2. [mmu/cache]-ARM MMU的学习笔记-一篇就够了

    ★★★ 个人博客导读首页-点击此处 ★★★ . 说明: 在默认情况下,本文讲述的都是ARMV8-aarch64架构,linux kernel 64位 . 相关文章 1.ARM cache的学习笔记-一 ...

  3. [mmu/cache]-ARM cache的学习笔记-一篇就够了

    ★★★ 个人博客导读首页-点击此处 ★★★ . 说明: 在默认情况下,本文讲述的都是ARMV8-aarch64架构,linux kernel 64位 . 相关文章 1.ARM MMU的学习笔记-一篇就 ...

  4. Vue学习笔记进阶篇——Render函数

    本文为转载,原文:Vue学习笔记进阶篇--Render函数 基础 Vue 推荐在绝大多数情况下使用 template 来创建你的 HTML.然而在一些场景中,你真的需要 JavaScript 的完全编 ...

  5. PHP学习笔记 - 进阶篇(7)

    PHP学习笔记 - 进阶篇(7) 文件操作 读取文件内容 PHP具有丰富的文件操作函数,最简单的读取文件的函数为file_get_contents,可以将整个文件全部读取到一个字符串中. $conte ...

  6. Vue学习笔记入门篇——数据及DOM

    本文为转载,原文:Vue学习笔记入门篇--数据及DOM 数据 data 类型 Object | Function 详细 Vue 实例的数据对象.Vue 将会递归将 data 的属性转换为 getter ...

  7. WPF学习笔记(数据绑定篇3)

    接上回的<WPF学习笔记(数据绑定篇2)>,继续 BindValidation 此示例演示了: 如何使用错误模板: 使用样式显示错误信息: 如何在校验发生异常时执行回调: 首先,你可以看见 ...

  8. Vue学习笔记进阶篇——多元素及多组件过渡

    本文为转载,原文:Vue学习笔记进阶篇--多元素及多组件过渡 多元素的过渡 对于原生标签可以使用 v-if/v-else.但是有一点需要注意: 当有相同标签名的元素切换时,需要通过 key 特性设置唯 ...

  9. PhalAPI学习笔记拓展篇 ———ADM模式中NotORM实现简单CURD

    PhalAPI学习笔记拓展篇 ---ADM模式中NotORM实现简单CURD 前言 内容 ADM模式 ADM简单介绍 准备工作 PhalAPI提供的CURD操作方法 业务实现 结束语 前言 公司业务需 ...

  10. 极客HTTP协议学习笔记破冰篇(1-7)

    极客HTTP协议学习笔记破冰篇(1-7) 前言 各篇章笔记链接 一.学习笔记 1.HTTP的前世今生 2.HTTP是什么 3.与HTTP相关的各种概念(上) 4.与HTTP相关的各种概念(下) 5.常 ...

最新文章

  1. pageEncoding和ContextType区别
  2. 前端——JavaScript
  3. python 惰性_Django中的“惰性翻译”方法的相关使用
  4. scikit-image 几个案例(下)
  5. Linux 下禅道和 SVN、GIT 集成插件发布
  6. Hack.Chat 在浏览器里快速建立简单、随用即丢线上聊天室,无须下载安装软体
  7. oracle中的(+)
  8. yii2 controller 接收get形式传输过来的参数
  9. allure 测试报告本地打开_Allure自动化测试报告我是这样用的
  10. 利用存储过程批量生成数据
  11. Quartus 与 ModelSim 联合仿真详细步骤
  12. Jmeter-Beanshell
  13. 史上最全4S店维修潜规则 看完绝不被坑
  14. 第一次去曼谷旅游怎么玩?这份省钱攻略请收好
  15. 什么是iBeacon?
  16. 欢迎使用CSDN-markdown编辑器不啵啵啵啵啵啵啵啵啵啵啵啵
  17. 值得收藏的12款小众冷门但功能强大的在线神器
  18. 热电阻PT100转4-20mA温度信号转换器,变送分配器
  19. MFC注册表CRegKey
  20. Python编程初学者指南——有所思

热门文章

  1. 阿波罗登月51周年,程序员用DAIN技术还原阿波罗登月高清影像,效果震撼
  2. 2050,一个属于年青人的大会
  3. qt 操作html,如何在Webkit窗口中操作页面内容(使用QT和QTWebKit)?
  4. 《最强蜗牛》运营分析:这个奇葩放置游戏的乐趣在哪里?
  5. 行业人士谈悄然成功的《星际战甲》所带来的启示
  6. Cocos 2d-x 3.3版本升级 五大维度提升3D品质
  7. 拯救跟我一样的初学者:XML到底是什么玩意,用能让初学者听得懂的话
  8. 网络学习笔记网络通讯
  9. LOJ#6085. 「美团 CodeM 资格赛」优惠券(set)
  10. python-sdk-demo的打包