最近一个项目需要相当高的执行效率。
该项目的工作就是要比另一个网络位置相同的设备,拥有更快的处理速度。在用尽一切办法之后,发现成功率(比另一个设备更快的比例)只能达到70%~80%。
最后想到提高进程在本机的执行速度,因为目前服务器都是8核CPU。所以指定进程运行于最空闲的CPU,拥有最高的执行优先级。结果效率相当明显,成功率达到了100%。
以下是指定CPU及优先级的方法:
一、进程使用指定的CPU
- /***************************************************************
- *function name: Lfun_setcpuno *
- *return: *
- * 0 : success. *
- * -1 : parameter cpuno error. *
- * -2 : set affinity error. *
- *parameter: cpu number *
- *developer: zhonghaohua *
- *date: 2012-8-22 *
- ***************************************************************/
- //#include <unistd.h>
- //#define __USE_GNU
- //#include <sched.h>
- int Lfun_setcpuno(unsigned int cpuno)
- {
- unsigned int cpucnt = sysconf(_SC_NPROCESSORS_CONF);
- if(cpuno >= cpucnt)
- return -1;
- cpu_set_t mask;
- CPU_ZERO (&mask);
- CPU_SET (cpuno, &mask);
- if (sched_setaffinity(0, sizeof(mask), &mask) == -1)
- return -2;
- return 0;
- }
二、指定优先级
- setpriority(PRIO_PROCESS, 0, -20);
注意:root用户才有权提高优先级。
end.
阅读(2879) | 评论(0) | 转发(2) |