线程与cpu进行绑定——006非常全面
来源:互联网 发布:软件开发公司账务处理 编辑:程序博客网 时间:2024/06/04 19:24
http://blog.csdn.net/jxnu_xiaobing/article/details/44955613
最近在对项目进行性能优化,由于在多核平台上,所以了解了些进程、线程绑定cpu核的问题,在这里将所学记录一下。不管是线程还是进程,都是通过设置亲和性(affinity)来达到目的。对于进程的情况,一般是使用sched_setaffinity这个函数来实现,网上讲的也比较多,这里主要讲一下线程的情况。与进程的情况相似,线程亲和性的设置和获取主要通过下面两个函数来实现:
- 1
- 2
- 3
- 4
从函数名以及参数名都很明了,唯一需要点解释下的可能就是cpu_set_t这个结构体了。这个结构体的理解类似于select中的fd_set,可以理解为cpu集,也是通过约定好的宏来进行清除、设置以及判断:
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
cpu集可以认为是一个掩码,每个设置的位都对应一个可以合法调度的 cpu,而未设置的位则对应一个不可调度的 CPU。换而言之,线程都被绑定了,只能在那些对应位被设置了的处理器上运行。通常,掩码中的所有位都被置位了,也就是可以在所有的cpu中调度。 以下为测试代码:
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 1
这段代码将使myfun线程在所有cpu中依次执行一段时间,在我的四核cpu上,执行结果为 :
- 1
- 2
- 3
- 4
- 5
在一些嵌入式设备中,运行的进程线程比较单一,如果指定进程线程运行于特定的cpu核,减少进程、线程的核间切换,有可能可以获得更高的性能。
阅读全文
0 0
- 线程与cpu进行绑定——006非常全面
- 线程与cpu进行绑定
- 进程线程与cpu绑定
- linux下将不同线程绑定到不同core和cpu上 pthread_setaffinity_np——005最全面
- 线程绑定CPU核——001
- Visual C++学习总结——进程或线程与指定CPU绑定
- 线程与CPU核的绑定
- 线程绑定CPU核-sched_setaffinity——003
- 线程绑定CPU核
- 线程cpu绑定技术
- 线程绑定CPU
- 为线程绑定CPU
- 线程绑定CPU核
- 线程绑定CPU核
- 线程绑定CPU核
- 线程绑定CPU核
- 线程绑定CPU核
- 线程绑定CPU核
- 写入、读出数据
- Intellij IDEA 14中使用MyBatis-generator 自动生成MyBatis代码
- Java调用R语言
- angularjs实现省市二级菜单(可以选择默认值)
- 选择合适的电阻型分压器
- 线程与cpu进行绑定——006非常全面
- its MIME type ('text/html') is not executable, and strict MIME type checking is enabled.
- Required String parameter is not present 或 Unsupported Media Type
- 客户端简单位置同步
- [常见Bug]Kotlin,编译报错“Unresolved reference: ......”的解决方法
- Kruskal算法求最小生成树的c++代码实现
- redis服务搭建及简单使用
- 从相册中选择照片
- oracel存储过程