关于
Buy Me a Coffee
归档
友链
猫咪
RSS
后台
切换模式
返回顶部
首页
说说
日常
开发
游戏
资源
虚拟货币
首页
说说
日常
开发
游戏
资源
虚拟货币
关于
Buy Me a Coffee
归档
友链
猫咪
RSS
后台
pthreads的一些坑
开发
·
2018-01-20
·
更新于 2021-11-23
LiesAuer
整理总结了一些自己在使用pthreads时遇到的坑,不定期更新。 Env: php version: 7.0.19 pthreads version: 3.1.6 :warning:FBI WARNING 除特殊注明,本文内所有多线程相关代码的结果输出顺序都将会受线程执行顺序影响而不定,如您在实际当中发现您的结果顺序(结果一样,只是顺序错乱)和本文不一致,请保持淡定,都坐下,基本操作,基本操作。 ![TIM图片20180120215329.jpg](https://storage.liesauer.net/2018/01/2471020791.jpg) - [(new class extends \Thread {})->start()将导致代码阻塞](/blog/post/pthreads_trap.html#trap01 "(new class extends \Thread {})->start()将导致代码阻塞") - [函数中创建线程将导致函数阻塞](/blog/post/pthreads_trap.html#trap02 "(函数中创建线程将导致函数阻塞") - [Pool非继承于Threaded](/blog/post/pthreads_trap.html#trap03 "Pool非继承于Threaded") [线程中无法进行哈希表操作以及使用不可序列化的对象](/blog/post/pthreads_trap.html#trap04 "线程中无法进行哈希表操作以及使用不可序列化的对象")
### (new class extends \Thread {})->start()将导致代码阻塞 #### 代码复现 ```php (new class extends \Thread { public function run() { echo "i am new thread\n"; $this->wait(); } })->start(); echo "i am main thread\n"; ``` #### 期待结果 ``` i am new thread i am main thread ``` #### 实际结果 ``` i am new thread ``` #### 解决方案 不使用(new class extends \Thread {})->start()语法 ```php $t = new class extends \Thread { public function run() { echo "i am new thread\n"; $this->wait(); } }; $t->start(); echo "i am main thread\n"; ``` #### 最终结果 ``` i am new thread i am main thread ```
### 函数中创建线程将导致函数阻塞 #### 代码复现 ```php function my_function() { $t = new class extends \Thread { public function run() { echo "i am new thread inside function\n"; $this->wait(); } }; $t->start(); } my_function(); echo "i am main thread\n"; ``` #### 期待结果 ``` i am new thread inside function i am main thread ``` #### 实际结果 ``` i am new thread inside function ``` #### 解决方案 暂无,不确定是否为BUG。
## Pool非继承于Threaded Pool 是标准的 PHP 对象,它并没有继承 Threaded 类,所以不可以在多个线程上下文中共享同一个 Pool 对象。
### 线程中无法进行哈希表操作以及使用不可序列化的对象 以下操作素不行滴: ```php $this->arr['element'] = 'ng'; // 应改为以下形式 $this->arr = ['element'=>'ok']; $this->callback = function(){}; ```
如果您觉得文章或项目对您有帮助,戳我请博主喝一杯咖啡叭!
取消回复
提交评论
瞅一瞅叭
域名出售
uterminal.ai
服务器推荐
RackNerd 2C2G $20.98/年(美国 隐藏款)
狗云 1C0.75G ¥150/年(香港 BGP)
最新评论
tinker: 为什么运行一段时间就会停止,重启又恢复!没有报错信息,频道信息和...
pansoo: 大佬,这个只能下载文件吗?能不能保存频道消息
Miller: 最好再多加一个查漏补缺的功能(捂脸(/ω\)),因为抓取了3天才...
Miller: 大佬,好像不会爬取jpeg文件,图片和视频数量对不上,是不是图片...
cola: 大佬,可以爬取电报频道的评论内容嘛
Miller: 大佬我终于会了,用cmd命令cd /d G:\cco,感谢大佬指点!
Miller: https://img13.chkaja.com/files/2...
关于站长
广东 佛山
liesauer#liesauer.net
LiesAuer
CC BY-NC-SA 4.0
粤ICP备16094588号-1
萌ICP备20245567号
Theme
Jasmine
by
Kent Liao