PHP 扩展 php-affinity

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;
                    }

提供了如下三个函数:

  1. setaffinity – 设置cpu亲和性
  2. getaffinity – 获取cpu亲和性
  3. getcpucores – 获取cpu核心数量

API 如下:

参考文献:

  1. https://zh.wikipedia.org/wiki/%E5%A4%84%E7%90%86%E5%99%A8%E4%BA%B2%E5%92%8C%E6%80%A7
  2. http://www.ibm.com/developerworks/cn/linux/l-affinity.html
  3. http://www.cnblogs.com/LubinLew/p/cpu_affinity.html

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

时间: 2024-10-01 19:51:57

PHP 扩展 php-affinity的相关文章

[原创]WCF后续之旅(12): 线程关联性(Thread Affinity)对WCF并发访问的影响

在本系列的上一篇文章中,我们重点讨论了线程关联性对service和callback的操作执行的影响:在service host的时候,可以设置当前线程的SynchronizationContext,那么在默认情况下,service操作的执行将在该SynchronizationContext下执行(也就将service操作包装成delegate传入SynchronizationContext的Send或者Post方法):同理,对于Duplex同行方式来讲,在client调用service之前,如果

360安全浏览器如何使用扩展

  什么是扩展程序 扩展程序是可以方便地添加到360安全浏览器中的附加特性和功能.扩展程序可让您自定义360安全浏览器的各种功能,同时可以精简浏览器,去掉其中不需要的功能. 试用扩展程序 访问 360安全浏览器的扩展中心,查找感兴趣的扩展程序.如果您找到了感兴趣的扩展程序,那就安装试用吧! 管理扩展程序 右键点击扩展程序的图标,能完成设置.停用.卸载的操作.点击工具栏上的扩展中心图标,可以对已安装的扩展进行批量管理.

360极速浏览器如何使用扩展

什么是扩展程序 扩展程序是可以方便地添加到360极速浏览器中的附加特性和功能.扩展程序可让您自定义360极速浏览器的各种功能,同时可以精简浏览器,去掉其中不需要的功能. 以下是我们喜爱扩展程序的几个原因: 获得网页的相关积分信息. 扩展程序可通过相关链接和信息改善您正在查看的网页.例如,使用选择获取地图扩展程序,您只需突出显示网页上的地址就能获取即时路线和地图链接. 及时获取通知. 某些扩展程序会在地址栏旁添加按钮,以便通知您某些活动的相关情况.例如,使用 Google Mail 检查程序可在收

iOS8新特性扩展(Extension)应用之四——自定义键盘控件

iOS8新特性扩展(Extension)应用之四--自定义键盘控件         iOS8系统的开放第三方键盘,使得用户在输入法的选择上更加自主灵活,也更加贴近不同语言的输入风格.这篇博客,将介绍如何开发一个第三方的键盘控件. 一.了解UIInputViewController类         UIInputViewController是系统扩展支持键盘扩展的一个类,通过这个类,我们可以自定义一款我们自己的键盘提供给系统使用.         首先,我们先来看一下这个类中的一些属性和方法:

基于SharpMap扩展程序开发实例

SharpMap是基于.Net平台开发的GIS地图渲染组件.在SharpMap的内部设计了基于OGC 标准的几何模型 构架,设计了IProvider策略模式的多源矢量地图数据适配器接口,地图要素渲染的底层主要通过几何变 换将Geometry转换为.Net支持的几何模型如System.Drawing.Point.System.Drawing.Rectangle. System.Drawing.Drawing2D.GraphicsPath等,然后调用System.Drawing.Graphics类的

分布式数据库——从线性扩展谈分布式JOIN

在首届阿里巴巴中间件峰会上,来自阿里巴巴DRDS团队的梦实分享了<分布式数据库--从线性扩展谈分布式JOIN>.他主要从OLTP数据库的线性扩展.水平扩容.IN查询.分布式JOIN四个方面进行了分享.在分享中,他主要通过买家与订单场景.家庭与孩子场景介绍了IN查询,通过同维度的JOIN.广播表的JOIN.Nested Loop Join详细介绍了分布式JOIN的坑与填坑.   以下内容根据直播视频整理而成.   在数据库的使用过程中,我们难免会问到这样的问题,为什么分库分表?答案是为了达到线性

支持用 CoffeeScript 调试的 Chrome 扩展

CoffeeScript 越来越流行了,coffee控门想尽一切手段鄙视js的臃肿.这个扩展就可以在console里也能使用coffee script 不会coffee,只能简单的抄这么一句测试下.. 已经实现的功能: - 使用 CoffeeScript 输入 - 格式化输出 - 自动补全 - 命令历史 安装地址:https://chrome.google.com/webstore/detail/amcoffee/eohnbihebhopoapemdbbodaiaagpogik via 谷奥

【转】Windows Shell扩展编程傻瓜手册大全:上下文菜单扩展

引用自:http://blog.163.com/yesaidu@126/blog/static/51819307200861853827582/ Part I: A step-by-step tutorial on writing shell extensions 第一节:Windows shell扩展初步:上下文菜单扩展   作者:Michael Dunn 译者:yesaidu   源代码下载:1       2   目录 ● README ● 系列绪言 ● 第一部分绪言 ● 从AppWiza

求助,正则表达式关于扩展名

问题描述 求助,正则表达式关于扩展名 我想检验后缀名为doc;ppt;exe可以输入一个或多个扩展名.多个用";"号隔开.就像我上面写的那样.该怎么写呢? 解决方案 ^[a-zd]+(;[a-zd]+)*$ 解决方案二: 提取扩展名的正则表达式求助正则表达式正则表达式