看海康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()相关推荐

  1. linux下把进程绑定到特定cpu核上运行

    现在大家使用的基本上都是多核cpu,一般是4核的.平时应用程序在运行时都是由操作系统管理的.操作系统对应用进程进行调度,使其在不同的核上轮番运行. 对于普通的应用,操作系统的默认调度机制是没有问题的. ...

  2. linux指定cpu运行程序,进程/线程绑定到特定CPU核的linux实现(有代码有实例)

    前言 现在计算机上的CPU大多都是多核的,有4核甚至是8核的.但是一个计算机启动之后其进程数是远远多于CPU核数的,因为操作系统会给自动调度这些进程在CPU核上轮流运行.但是对于应用程序或者进程,其性 ...

  3. 使用 sched_setaffinity 将线程绑到CPU核上运行

    linux 提供CPU调度函数,可以将CPU某一个核和指定的线程绑定到一块运行. 这样能够充分利用CPU,且减少了不同CPU核之间的切换,尤其是在IO密集型压力之下能够提供较为友好的性能. 通过sch ...

  4. c和cpp实现CPU核上绑定固定线程

    文章目录 参考链接: 相关概念及工具 CPU亲和性 查看cpu有几个核 命令查看 代码查看 代码讲解 cpu集(cpu_set_t) cpu_set_t的使用 非动态分配cpu_set_t 动态分配c ...

  5. 【C++多线程编程学习(1)】-CPU个数、CPU核心数、CPU线程数

    转自:CPU个数.CPU核心数.CPU线程数(by kimsimple) CPU个数即CPU芯片个数. CPU核心数是指物理上,也就是硬件上存在着几个核心.比如,双核就是包括2个相对独立的CPU核心单 ...

  6. CPU知识(CPU个数、CPU核心数、CPU线程数、多核CPU等)

    CPU知识(CPU个数.CPU核心数.CPU线程数.多核CPU等 CPU个数.CPU核心数.CPU线程数 多核CPU 单核多CPU与多核单CPU 今天看到服务器中有8核8线程和8核16线程的区分,觉得 ...

  7. asp.net core mvc中如何把二级域名绑定到特定的控制器上

    由于公司的工作安排,一直在研究其他技术,所以一直没时间更新博客,今天终于可以停下手头的事情,写一些新内容了. 应用场景:企业门户网站会根据内容不同,设置不同的板块,如新浪有体育,娱乐频道,等等.有的情 ...

  8. CPU个数、CPU核心数、CPU线程数

    核心概念 CPU个数:CPU芯片个数 CPU的核心数:是指硬件上存在着几个核心. 比如,双核就是包括2个相对独立的CPU核心单元组,四核就包含4个相对独立的CPU核心单元组. 线程数:一种逻辑的概念, ...

  9. 物理CPU数、CPU核心数、CPU线程数

    Windows系统中,在cmd中输入命令"wmic". >wmic wmic:root\cli> 输入命令"cpu get Name",获取物理CP ...

最新文章

  1. Occupancy Networks:基于学习函数空间的三维重建表示方法
  2. CentOS Linux 7.3 1611 (Core) 配置静态IP地址
  3. ios使用支付宝进行支付,注意事项 集成支付宝钱包支付iOS SDK的方法与经验。...
  4. x学校计算机及网络维护方案,校园计算机网络常见故障的处理与维护
  5. spring EL 实现ref的效果
  6. 博客园自动显示随笔标签
  7. Java刺客信条回复生命,刺客信条英灵殿怎么回血 生命值恢复方法介绍
  8. 【珍藏版】 200个机器学习 NLP Python 免费相关教程
  9. Jade模板引擎教程
  10. 利用python分析微信聊天记录
  11. html5+css3.5手机站标准写法,移动端手机网站基本模板
  12. vue面试常见问题小结
  13. Mac软件推荐:Soulver原来这么好用
  14. UIUC简介 -- 写给今年得到UIUC Offer并在犹豫中的同学
  15. 网页制作之JavaScript篇
  16. QtScrcpy使用指南
  17. gcc / -Wl,-Bsymbolic
  18. C#中文件转换为byte[]及Base64String
  19. html怎么显示base64,如何在HTML中显示Base64图像?
  20. python爬取猫眼电影

热门文章

  1. Windows server 2008文件服务器之二屏蔽影音文件以及指定文件名
  2. loadrunner脚本练习
  3. matlab gui自定义图片做背景,matlab GUI自定义图片做背景
  4. 【备忘】外币评估数据存储表
  5. SAPABAP性能优化技巧—使用二分查找(Binary Search)选项
  6. ABAP常用字符串操作收集整理
  7. 干燥剂变身“配重剂”,究竟有多少商家在休闲零食市场浑水摸鱼?
  8. 阿里再推社交“Real如我”,是电商巨头的流量焦虑
  9. 中国农业大学计算机研究生分数线,中国农业大学2017年硕士研究生招生考试复试分数线...
  10. excel随机抽取_Excel条件格式,扮靓你的报表