PHP 扩展 php-affinity

    xiaoxiao2023-06-18  179

    php-affinity 详细介绍

    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/处理器亲和性http://www.ibm.com/developerworks/cn/linux/l-affinity.htmlhttp://www.cnblogs.com/LubinLew/p/cpu_affinity.html

    文章转载自 开源中国社区[https://www.oschina.net]

    最新回复(0)