为什么要把进程/线程绑定到特定cpu核上运行?(cpu core id coreIdx)opdevsdk_sys_bindThreadCoreId()
看海康hikflow_demo代码,在线程处理函数里调用了绑定函数,把这个线程绑定到某个cpu核上,不知为何要这么做?
原因
答1
现在大家使用的基本上都是多核cpu,一般是4核的。平时应用程序在运行时都是由操作系统管理的。操作系统对应用进程进行调度,使其在不同的核上轮番运行。
对于普通的应用,操作系统的默认调度机制是没有问题的。但是,当某个进程需要较高的运行效率时,就有必要考虑将其绑定到单独的核上运行,以减小由于在不同的核上调度造成的开销。
把某个进程/线程绑定到特定的cpu核上后,该进程就会一直在此核上运行,不会再被操作系统调度到其他核上。但绑定的这个核上还是可能会被调度运行其他应用程序的。
参考文章:linux下把进程/线程绑定到特定cpu核上运行
答2
C语言作为语言本身,并没有强制把线程、进程绑定到特定CPU核的要求和机制,绑定的方法有,与硬件架构和操作系统密切相关,但与C语言无关。
线程、进程绑定cpu内核的原因是为了优化、加速运行或者特定CPU架构和操作系统要求,特别是操作系统要求(及实现)。
最传统的多核架构是SMP,每个CPU核完全平等甚至无法区分,cache,内存都是全局的,在这种情况下,绑定CPU核无意义,而且也违背架构设计的基础:对上层OS和应用透明。但随着CPU核增多,SMP架构的全局平等方案导致用于一致性、互联的实现成本越来越高(互联电路、冲突处理等等),最后当CPU核心很多时,通用计算系统不得不采用更经济的架构,例如NUMA这种一层一层局部互联、分组互联,最终全局互联的方案,这时候绑定CPU就有意义了,其实也是需要通过绑定CPU核配合CPU核之间不再是完全平等的,是有所谓“远、近”区别的。绑定的目的是使存放该线程、进程的存储(内存、cache)与运行这些数据指令的CPU核更贴近,而不用从远处的内存、cache获取(因为内存、cache访问不再是全局的,而是局部的,只是具有虚拟的全局可访问性)。这种方案一般只在操作系统调度算法中会显式使用,其它程序基本不会主动去探测,因为线程、进程自己没有能力去强制改变运行自己的CPU核,只能检测。检测出来运行自己的CPU核之后,难道自己把自己挂掉?依然没效率。所以除了编写OS中进程、线程调度算法部分,你是看不到有关指令的。
大部分相关指令是一种编程技巧,就是利用CPU核自身ID去获得唯一的数据队列标志,每个CPU核分配一个队列(一般是环形队列),这样就物理上保证了队列不会有多个consumer或producer,天然不用考虑锁问题。在操作系统和驱动程序编程中,经常用到这种技巧。
参考文章:C语言为什么要把线程/进程绑定到特定的cpu核运行? - harry4112的回答 - 知乎
为什么要把进程/线程绑定到特定cpu核上运行?(cpu core id coreIdx)opdevsdk_sys_bindThreadCoreId()相关推荐
- linux下把进程绑定到特定cpu核上运行
现在大家使用的基本上都是多核cpu,一般是4核的.平时应用程序在运行时都是由操作系统管理的.操作系统对应用进程进行调度,使其在不同的核上轮番运行. 对于普通的应用,操作系统的默认调度机制是没有问题的. ...
- linux指定cpu运行程序,进程/线程绑定到特定CPU核的linux实现(有代码有实例)
前言 现在计算机上的CPU大多都是多核的,有4核甚至是8核的.但是一个计算机启动之后其进程数是远远多于CPU核数的,因为操作系统会给自动调度这些进程在CPU核上轮流运行.但是对于应用程序或者进程,其性 ...
- 使用 sched_setaffinity 将线程绑到CPU核上运行
linux 提供CPU调度函数,可以将CPU某一个核和指定的线程绑定到一块运行. 这样能够充分利用CPU,且减少了不同CPU核之间的切换,尤其是在IO密集型压力之下能够提供较为友好的性能. 通过sch ...
- c和cpp实现CPU核上绑定固定线程
文章目录 参考链接: 相关概念及工具 CPU亲和性 查看cpu有几个核 命令查看 代码查看 代码讲解 cpu集(cpu_set_t) cpu_set_t的使用 非动态分配cpu_set_t 动态分配c ...
- 【C++多线程编程学习(1)】-CPU个数、CPU核心数、CPU线程数
转自:CPU个数.CPU核心数.CPU线程数(by kimsimple) CPU个数即CPU芯片个数. CPU核心数是指物理上,也就是硬件上存在着几个核心.比如,双核就是包括2个相对独立的CPU核心单 ...
- CPU知识(CPU个数、CPU核心数、CPU线程数、多核CPU等)
CPU知识(CPU个数.CPU核心数.CPU线程数.多核CPU等 CPU个数.CPU核心数.CPU线程数 多核CPU 单核多CPU与多核单CPU 今天看到服务器中有8核8线程和8核16线程的区分,觉得 ...
- asp.net core mvc中如何把二级域名绑定到特定的控制器上
由于公司的工作安排,一直在研究其他技术,所以一直没时间更新博客,今天终于可以停下手头的事情,写一些新内容了. 应用场景:企业门户网站会根据内容不同,设置不同的板块,如新浪有体育,娱乐频道,等等.有的情 ...
- CPU个数、CPU核心数、CPU线程数
核心概念 CPU个数:CPU芯片个数 CPU的核心数:是指硬件上存在着几个核心. 比如,双核就是包括2个相对独立的CPU核心单元组,四核就包含4个相对独立的CPU核心单元组. 线程数:一种逻辑的概念, ...
- 物理CPU数、CPU核心数、CPU线程数
Windows系统中,在cmd中输入命令"wmic". >wmic wmic:root\cli> 输入命令"cpu get Name",获取物理CP ...
最新文章
- Occupancy Networks:基于学习函数空间的三维重建表示方法
- CentOS Linux 7.3 1611 (Core) 配置静态IP地址
- ios使用支付宝进行支付,注意事项 集成支付宝钱包支付iOS SDK的方法与经验。...
- x学校计算机及网络维护方案,校园计算机网络常见故障的处理与维护
- spring EL 实现ref的效果
- 博客园自动显示随笔标签
- Java刺客信条回复生命,刺客信条英灵殿怎么回血 生命值恢复方法介绍
- 【珍藏版】 200个机器学习 NLP Python 免费相关教程
- Jade模板引擎教程
- 利用python分析微信聊天记录
- html5+css3.5手机站标准写法,移动端手机网站基本模板
- vue面试常见问题小结
- Mac软件推荐:Soulver原来这么好用
- UIUC简介 -- 写给今年得到UIUC Offer并在犹豫中的同学
- 网页制作之JavaScript篇
- QtScrcpy使用指南
- gcc / -Wl,-Bsymbolic
- C#中文件转换为byte[]及Base64String
- html怎么显示base64,如何在HTML中显示Base64图像?
- python爬取猫眼电影
热门文章
- Windows server 2008文件服务器之二屏蔽影音文件以及指定文件名
- loadrunner脚本练习
- matlab gui自定义图片做背景,matlab GUI自定义图片做背景
- 【备忘】外币评估数据存储表
- SAPABAP性能优化技巧—使用二分查找(Binary Search)选项
- ABAP常用字符串操作收集整理
- 干燥剂变身“配重剂”,究竟有多少商家在休闲零食市场浑水摸鱼?
- 阿里再推社交“Real如我”,是电商巨头的流量焦虑
- 中国农业大学计算机研究生分数线,中国农业大学2017年硕士研究生招生考试复试分数线...
- excel随机抽取_Excel条件格式,扮靓你的报表