php-affinity PHP 扩展

我要开发同款
匿名用户2015年11月23日
54阅读
开发技术Object-c
所属分类Objective-C、高性能网络开发库、程序开发
授权协议MIT

作品详情

Php-affinity通过设置cpu亲和性,可以将进程绑定到一个cpu核心上。一般在如下场景我们可能会希望修改进程的cpu亲和性:

 频繁的并行运算

 线程可伸缩性测试(通过增加cpu核心数量模拟线性扩展)

 运行时间敏感的,决定性的进程

向nginx,swoole等开源软件,都提供了设置cpu亲和性的方法。nginx官方建议worker数量等同于cpu核心数量也是为了将一个进程绑定到一个cpu核心上,同时避免进程切换带来的开销。

Php本身并没有提供设置cpu亲和性的函数,我们可以通过两种方式实现:

 调用系统命令,修改当前进程cpu亲和性

 编写php扩展,封装系统调用。

php-affinity是使用c编写的php扩展,项目地址:https://github.com/huyanping/php-affinity

    /**                     * set CPU affinity                     *                     * @param $cpu_id                     * @return bool                     */                    functionsetaffinity($cpu_id){                        $num= getcpucores();                        if($cpu_id>= $num){                            returnfalse;                        }                        $set= system_call($cpu_id);                        if($set=== -1){                            returnfalse;                        }                                             returntrue;                    }                                         /**                     * get CPU affinity                     *                     * @return bool                     */                    functiongetaffinity(){                        $cpu_id= system_call();                        if($cpu_id=== -1){                            returnfalse;                        }                        return$cpu_id;                    }                                                              /**                     * get number of CPU                     *                     * @return bool                     */                    functiongetcpucores(){                        $nums= system_call();                        if($nums=== -1){                            returnfalse;                        }                        return$nums;                    }

提供了如下三个函数:

setaffinity–设置cpu亲和性

getaffinity–获取cpu亲和性

getcpucores–获取cpu核心数量

API如下:

参考文献:

https://zh.wikipedia.org/wiki/%E5%A4%84%E7%90%86%E5%99%A8%E4%BA%B2%E5%92%8C%E6%80%A7

https://www.ibm.com/developerworks/cn/linux/l-affinity.html

https://www.cnblogs.com/LubinLew/p/cpu_affinity.html

声明:本文仅代表作者观点,不代表本站立场。如果侵犯到您的合法权益,请联系我们删除侵权资源!如果遇到资源链接失效,请您通过评论或工单的方式通知管理员。未经允许,不得转载,本站所有资源文章禁止商业使用运营!
下载安装【程序员客栈】APP
实时对接需求、及时收发消息、丰富的开放项目需求、随时随地查看项目状态

评论