相比较迭代器,生成器提供了一种更容易的方法来实现简单的对象迭代,性能开销和复杂性都大大降低。
一个生成器函数看起来像一个普通的函数,不同的是普通函数返回一个值,而一个生成可以yield生成许多它所需要的值,并且每一次的生成返回值只是暂停当前的执行状态,当下次调用生成器函数时,PHP会从上次暂停的状态继续执行下去。
strong to refuse
相比较迭代器,生成器提供了一种更容易的方法来实现简单的对象迭代,性能开销和复杂性都大大降低。
一个生成器函数看起来像一个普通的函数,不同的是普通函数返回一个值,而一个生成可以yield生成许多它所需要的值,并且每一次的生成返回值只是暂停当前的执行状态,当下次调用生成器函数时,PHP会从上次暂停的状态继续执行下去。
PHP提供了统一的迭代器接口:1
2
3
4
5
6
7
8
9
10
11
12
13Iterator extends Traversable
{
//返回当前元素
abstract public mixed current(void)
//返回当前元素的键
abstract public scalar key(void)
//向下移动到下一个元素
abstract public void next(void)
//返回到迭代器的第一个元素
abstract public void remind(void)
//检查当前位置是否有效
abstract public boolean valid(void)
}
MySQL下查询锁信息
SHOW PROCESSLIST;
SHOW OPEN TABLES WHERE In_use > 0;
#运行线程
SHOW GLOBAL STATUS LIKE ‘Threads_running%’;
#链接线程
SHOW GLOBAL STATUS LIKE ‘Threads_connected%’;
#查询数
SHOW GLOBAL STATUS LIKE ‘Queries%’;
SHOW GLOBAL STATUS LIKE ‘Question%’;
#提交数
SHOW GLOBAL STATUS LIKE ‘Com_commit’;
#回滚数
SHOW GLOBAL STATUS LIKE ‘Com_rollback’;
SHOW STATUS LIKE ‘Binlog_cache%’;
SHOW INNODB STATUS;
#日志功能参数查询
SHOW VARIABLES LIKE ‘%pro%’;
SHOW PROFILES;
#开启语句执行时间日志功能
SET profiling=0;
#显示数据日志ID
SHOW PROFILES;
SHOW PROFILE ALL FOR QUERY 839810;
在日常工作中,我们会有时会开慢查询去记录一些执行时间比较久的SQL语句,找出这些SQL语句并不意味着完事了,些时我们常常用到explain这个命令来查看一个这些SQL语句的执行计划,查看该SQL语句有没有使用上了索引,有没有做全表扫描,这都可以通过explain命令来查看。所以我们深入了解MySQL的基于开销的优化器,还可以获得很多可能被优化器考虑到的访问策略的细节,以及当运行SQL语句时哪种策略预计会被优化器采用。
elasticsearch 5.0 安装过程中遇到了一些问题,通过查找资料几乎都解决掉了,这里简单记录一下 ,供以后查阅参考,也希望可以帮助遇到同样问题的你。
PHP扩展(PECL)跟PHP引擎一样都是使用C语言开发。PHP核心开发组成员鸟哥Laruence使用的是VIM进行PHP开发。
http://www.laruence.com/2011/09/13/2139.html
书籍: http://www.walu.cc/phpbook/
案例: php-src/ext
PECL开发邮件组: http://news.php.net/php.pecl.dev
尽量编写一些phpt测试用例,php-src/tests下有很多参考.
测试时用–enable-debug编译PHP,要做到执行你的扩展逻辑,不输出任何错误信息.
用valgrind检测内存泄露.
1 | public function test() |