首页
下载
文档
社区
视频
捐赠
源代码
赞助商
AOT 编译器
AI 助理
商业产品
PHP AOT 原生编译器
Swoole-Compiler 代码加密器
CRMEB 新零售社交电商系统
登录
注册
全部
提问
分享
讨论
建议
公告
开发框架
CodeGalaxy
发表新帖
swoole支持多线程模式的建议探讨
php有一个多线程的扩展 pthreads (see: php.net/manual/zh/book.pthreads.php) 不知 @Rango 是否研究过,pthreads 实现多线程的原理很巧妙并且避免了php自身对多线程处理的短板,而且是线程安全的,它提供了一个 Threaded 的基础类,这个类实现了一个迭代器的功能。当使用pthreads进行多线程编程时,被创建的线程只有 Threaded 对象的变量是线程间相互共享的,其它变量都是隔离的。 目前swoole用多进程方式有自己的优点,但是实际开发中通过task进行投递也是有很多短板的,比如:数据不能实现共享(虽然提供了 swoole_table 但是这个对象不够灵活,且只能start前预先构造好,后续不能扩展和变动),投递任务必须要等到被投递进程是空闲的时候才会处理等等。 如果swoole使用 pthreads 一样的特性,启动 worker 和 taskWorker 时使用线程复制出n个后,程序编程时可对特定对象(类似 Threaded 迭代器) 数据进行操作并且能够实现线程间数据同步那么就完美了,这样很多数据的传递就不需要通过task去投递了。
发布于8年前 · 1 次浏览 · 来自
提问
1
111
php有一个多线程的扩展 pthreads (see: php.net/manual/zh/book.pthreads.php) 不知 @Rango 是否研究过,pthreads 实现多线程的原理很巧妙并且避免了php自身对多线程处理的短板,而且是线程安全的,它提供了一个 Threaded 的基础类,这个类实现了一个迭代器的功能。当使用pthreads进行多线程编程时,被创建的线程只有 Threaded 对象的变量是线程间相互共享的,其它变量都是隔离的。 目前swoole用多进程方式有自己的优点,但是实际开发中通过task进行投递也是有很多短板的,比如:数据不能实现共享(虽然提供了 swoole_table 但是这个对象不够灵活,且只能start前预先构造好,后续不能扩展和变动),投递任务必须要等到被投递进程是空闲的时候才会处理等等。 如果swoole使用 pthreads 一样的特性,启动 worker 和 taskWorker 时使用线程复制出n个后,程序编程时可对特定对象(类似 Threaded 迭代器) 数据进行操作并且能够实现线程间数据同步那么就完美了,这样很多数据的传递就不需要通过task去投递了。
赞
0
收藏
提问
分享
讨论
建议
公告
开发框架
CodeGalaxy
登录
后参与评论
评论
2017-10-06
冰
冰河世纪
非常同意
赞
0
回复
2017-10-07
s
scott
> 没有多线程,多线程不如多进程稳定可靠 > 所以现在流程的程序都是多进程,像nginx,fpm,甚至单进程单线程,如redis 这个是开发团队的解释。不过感觉还是多线程某些时候很方便。不然只能swoole_table+swoole_process+全局变量替代了。
赞
0
回复
2017-10-12
w
wettper
多线程编程非常容易出现问题,各种数据同步的BUG。使用Table,Task,SendMessage等功能完全可以实现这些功能,但是又没有这么坑。
赞
0
回复