04 2018 档案
php使用pthreads v3多线程的抓取新浪新闻信息
摘要:我们使用pthreads,来写一个多线程的抓取页面小程序,把结果存到数据库里。 数据表结构如下: 代码如下: 由于使用到了QueryList,大家可以通过composer进行安装。 不过安装的版本是3.2,在我的php7.2下会有问题,由于each()已经被废弃,所以修改下源码,each()全换成f
阅读全文
pthreads v3下一些坑和需要注意的地方
摘要:一、子线程无法访问父线程的全局变量,但父线程可以访问子线程的变量 结果如下: 二、子线程无法修改父线程的变量 结果如下: 三、pthreads v3版本可以设置成员为匿名函数 结果如下: 四、对于数据库连接资源,我们需要声明为静态成员 结果如下: 代码修改如下: 结果如下: 最后说明,不排除pthr
阅读全文
pthreads v3下的Volatile介绍与使用
摘要:由于pthreads v3中引入了Threaded对象自动不变性的概念,所以当我们在构造函数中给成员设置为数组时,在其他地方就无法对成员再次改写了。 例子如下: 如果我们对成员再次进行改写,那么就会报错了。 如果确实需要对成员数据进行改写,除了上面的显式强制转换外,另一个方法就是继承Volatile
阅读全文
pthreads v3下的同步处理synchronized
摘要:之所以会用到同步,是因为如果多个线程中对同一个资源进行操作时,会发生混乱。 比如2个线程对变量进行加1操作,第1个线程还没来的及改写数据时,第2个线程就对变量进行操作了,那变量最终的结果就是未知的,这个时候就需要同步来进行控制了。 例子如下: 多次运行后,$cnt的值是不确定的。如下图所示: 在pt
阅读全文
pthreads v3下的worker和pool的使用
摘要:有些人会想,明明用thread已经可以很好的工作了,为什么还要搞个worker和pool? 之所以要用到worker和pool还是因为效率,因为系统创建一个新线程代价是比较昂贵,每个创建的线程会复制当前执行的整个上下文。 尽可能的重用线程可以让我们的程序更高效。 一个简单的worker例子: 上面代
阅读全文
pthreads v3在centos7下的安装与配置
摘要:我的centos版本是7.4.1708,php的版本是7.2.4(注意要是线程安全版),如下图所示: 首先我们在如下网址下载好pthreads的源码: 如:pthreads-3.1.6.tgz 1、解压、并进入目录 2、运行phpize,生成configure,如果没有配置PATH的,可以打上绝对路
阅读全文
YII2中ActiveDataProvider与GridView的配合使用
摘要:YII2中ActiveDataProvider可以使用yii\db\Query或yii\db\ActiveQuery的对象,方便我们构造复杂的查询筛选语句。 配合强大的GridView,快速的显示我们想要的数据。 通过上面的两个工具,我们快速的显示用户表信息。用户表结构如下: 我们创建一个用户模型M
阅读全文
YII2中使用控制台命令
摘要:有些时候我们需要通过crontab在后台跑一些定时脚本,这时候就需要用到控制台命令了。 我们在commands目录下创建TestController.php,当然脚本的位置是可以随意指定的,只需要在config/console.php中配置好就行。 TestController.php代码如下: 运
阅读全文
YII2中添加自定义模块
摘要:有些时候系统功能过于复杂,这时我们需要通过模块把一些功能区分开来,便于管理与维护。 我用的是Yii2的基本应用程序模板,程序其实已经给我们提供了一个模块,就是app本身。YII2中是可以无限嵌套模块的。不过一般不要超过2层。 我们在app下创建一个modules的目录,并创建一个api子目录,子目录
阅读全文
YII2中日志的配置与使用
摘要:YII2中给我们提供了非常方便的日志组件,只需要简单配置一下就可以使用。 我们在config/web.php中配置如下: 通过下面5个方法,来写入我们自已的日志 注意我们上面定义日志的levels为['error', 'warning'],所以日志只会记录这两个级别的信息。 有些时候我们并不希望把所
阅读全文