浅谈Windows 上的线程亲和性(Thread affinity)

前言

        线程属性包括是否分离、亲和性、调度策略和优先级等。Linux默认的调度策略是CFS(完全公平调度算法),而 Windows 是基于优先级抢占式的策略。

        在这些方面,Windows 和 Linux 差异巨大。本文仅针对 Windows 系统的线程亲和性进行探讨。

线程亲和性(Thread affinity)

什么是线程亲和性(Thread affinity)?

        线程亲和性(Thread affinity)指进程和 CPU 核的亲和性,即线程在某个给定的 CPU 上尽量长时间地运行而不被迁移到其他处理器的倾向性。

        通俗的说就是将线程绑定到 CPU 上某一个或多个核上。注意,此处的核是指逻辑核心,而非物理核心。

        称为线程绑定CPU,更好理解一些。

为什么要设置线程亲和性(Thread affinity)?

        简单说,为了提升执行效率。

        首先,这个问题是随着CPU多核多线程技术而来的。

        对于应用程序来说,感知到的是逻辑CPU,物理 CPU(主板上插着的CPU)包含多个核心,如常说8核CPU,就对应了8个逻辑CPU。超线程技术(Hyper-Threading)进一步,利用特殊的硬件指令将两个逻辑CPU模拟成两个两个物理CPU,实现了多核多线程。

        最终,逻辑CPU数量 = 物理CPU数量 x CPU cores x 2(如果支持并开启HT)

        在多核系统上,操作系统通常可以在不同内核之间自由移动进程和线程,以确保整体工作负载均匀分布在可用内核上。这在通用计算机(如同时运行大量应用程序的笔记本电脑)上非常有用。

        但是,移动进程和线程可能会导致性能问题。

        每个 CPU 有独立的缓存,即CPU cache(高速缓冲存储器)。缓存着进程、线程的数据。在不绑定 CPU 的情况下,线程会被系统调度到其他 CPU 上,CPU cache 命中率很低,需要从内存、硬盘加载对应的数据,代价非常昂贵。而绑定 CPU 后,线程始终(或大概率)跑在指定的CPU上,性能会有进一步的提升。        

       

        通过绑定CPU,减少上下文切换、缓存未命中和内存访问延迟提高了程序的执行效率。

什么时候需要设置线程亲和性(Thread affinity)?

        那么,是不是任何时候将线程绑定到特定 CPU 就能达到最佳执行效率呢?        

        不!

        设置线程亲和性通常是为了优化特定类型的应用程序的性能,特别是在那些对性能要求极高的场景中。例如高性能计算(High-Performance Computing, HPC)、实时系统(Real-time Systems)、数据库、多级缓存优化、特定硬件操作等。

        对于大多数常规的应用程序,操作系统的调度器已经足够智能,能够根据当前的系统负载和资源使用情况做出合理的调度决策。强制设置线程亲和性可能不会带来显著的性能提升,甚至可能引起一些问题,如资源利用率不均、系统响应性下降、兼容性问题、热管理问题甚至性能下降。

        在大多数情况下,让操作系统的调度器来管理线程调度是更好的选择。

如何设置线程亲和性

        在 Windows 上,通过任务管理器即可手动调整。     

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/603751.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

解锁AI的神秘力量:LangChain4j带你步入智能化实践之门

关注微信公众号 “程序员小胖” 每日技术干货,第一时间送达! 引言 在数字化转型的浪潮中,人工智能(AI)正逐渐成为推动企业创新和增长的关键力量。然而,将AI技术融入到日常业务流程并非易事,它…

谷歌月球模型

收费产品,白嫖党勿扰 收费金额500元 1 概述 前些时间,有个客户,想fight TAIWAN,于是乎,我把谷歌地球整个台湾的模型都下载下来了,大约300GB。今天,又有个客户,提出一个过分要求&…

【第14章】spring-mvc之ajax

文章目录 前言一、准备二、单个值1.前端2.后端3. 结果 三、对象1.前端2.后端3. 结果 四、JSON对象1.前端2.后端3. 结果 五、JSON数组1.前端2.后端3. 结果 总结 前言 AJAX(Asynchronous JavaScript and XML)是一种用于创建快速动态网页的技术&#xff0c…

STM32:GPIO输入输出

文章目录 1、GPIO介绍1.1 GPIO的基本结构1.1 GPIO的位结构 2、 GPIO工作模式3、GPIO标准外设库接口函数3.1 RCC接口函数3.2 GPIO接口函数3.2.1 GPIO的读取函数3.2.1 GPIO的写入函数 4、GPIO的初始化 1、GPIO介绍 GPIO(General Purpose Input Output)通用…

深入大模型量化技术,大模型端侧落地已Ready?

揭秘未来:大模型量化技术如何革新移动AI应用 ©作者|饮水机 来源|神州问学 前言 最近,苹果发布了OpenELM系列模型,参数规模分别为270M、450M、1.1B和3B。与此同时,微软也推出了Phi-3系列模型,其中mini版本的参数…

支付时,中国网联结算与中国银联结算的区别与联系

随着电子商务和互联网支付的快速发展,中国的支付清算市场也呈现出前所未有的繁荣景象。在这个大背景下,中国网联与中国银联作为两大支付清算机构,各自扮演着重要的角色。本文将对两者的区别和联系进行深入探讨,以期对读者有更全面…

【北京迅为】《iTOP-3588开发板快速烧写手册》-第9章ubuntu系统下升级固件

RK3588是一款低功耗、高性能的处理器,适用于基于arm的PC和Edge计算设备、个人移动互联网设备等数字多媒体应用,RK3588支持8K视频编解码,内置GPU可以完全兼容OpenGLES 1.1、2.0和3.2。RK3588引入了新一代完全基于硬件的最大4800万像素ISP&…

智慧公厕,城市现代化公卫变革的关键节点

随着城市的快速发展,公共厕所作为社会基础民生设施,正越来越受到精细化管理的重视。智慧公厕的出现,为传统公共厕所的脏乱臭提供了解决方案,通过物联网、大数据、云计算、自动化控制等先进技术的贡献,使公厕管理更加高…

怎么编辑百度百科个人词条

辑百度百科个人词条是一个相对复杂的过程,需要遵循一定的步骤和规则。以下是百科优化网整理的编辑百度百科个人词条的步骤和注意事项。 1. 确定编辑资格 百度百科个人词条的编辑权主要赋予那些具有一定影响力的公众人物,或者是有一定“身份”的人物&…

大模型驱动的新一代 BI 平台,Sugar BI 开启智慧决策新模式

本文整理自 2024 年 4 月 16 日的 2024 百度 Create 大会上的《大模型驱动的新一代 BI 平台如何开启智慧决策》分享。 全文包括了可视化 BI 分析技术架构、智能图表推荐策略与规则设计、Sugar Bot 智能问数的技术实现流程,以及目前的场景应用等。 1 Sugar BI 产…

【C语言】路漫漫其修远兮,深入[指针]正当下

一. 指针初步 1.概念定义 地址:我们在内存中开辟空间时,为了方便后续访问,每个数据有确切的地址。 指针:指向数据的地址,并将其地址储存在指针变量中。 2.基本运算符 • 取地址操作符(&) …

OpenHarmony 4.0 实战开发——分布式软总线解析:设备发现与传输

OpenHarmony 的分布式软总线子系统为 OpenHarmony 系统提供的通信相关的能力,包括:WLAN 服务能力、蓝牙服务能力、软总线、进程间通信 RPC(Remote Procedure Call)等通信能力。 其中主要包括: WLAN 服务:…

【Java开发的我出书啦,各位同仁快过来围观】!!!

文章目录 🔊博主介绍🥤本文内容出书的目的出书的过程书籍的内容 📥博主的话 🔊博主介绍 文章目录 🔊博主介绍🥤本文内容出书的目的出书的过程书籍的内容 📥博主的话 🌾阅读前&#x…

机器学习 | 时间序列预测中的AR模型及应用

自回归模型,通常缩写为AR模型,是时间序列分析和预测中的一个基本概念。它们在金融、经济、气候科学等各个领域都有广泛的应用。在本文中,我们将探索自回归模型,它们如何工作,它们的类型和实际例子。 自回归模型 自回…

Elasticsearch中的三种分页策略深度解析:原理、使用及对比

码到三十五 : 个人主页 在Elasticsearch中,分页是查询操作中不可或缺的一部分。随着数据量的增长,如何高效地分页查询数据急需需要面对的问题。Elasticsearch提供了三种主要的分页方式:from size、scroll和search_after。下面详细…

ICode国际青少年编程竞赛- Python-2级训练场-基础训练4

ICode国际青少年编程竞赛- Python-2级训练场-基础训练4 1、 for i in range(4):if i > 2:Flyer[i].step(3)else:Flyer[i].step(1) Dev.step(Item[3].x - Dev.x)2、 for i in range(6):if i < 3:Flyer[i].step(2)else:Flyer[i].step(3) Dev.step(Item[2].x - Dev.x)3、 …

制造版图大变革!逾10座晶圆厂蓄势待发 | 百能云芯

在全球半导体产业的激烈竞争和市场需求的复杂波动中&#xff0c;晶圆厂建设热潮正在美国兴起&#xff0c;这一波建设浪潮的核心动力之一&#xff0c;便是美国政府推出的《芯片与科学法案》所承诺的巨额补贴&#xff0c;旨在提升美国在全球半导体行业的竞争力。 当地时间4月25日…

翻译《The Old New Thing》 - The new scratch program

The new scratch program - The Old New Thing (microsoft.com)https://devblogs.microsoft.com/oldnewthing/20050422-08/?p35813 Raymond Chen 2005年4月22日 译注&#xff1a;此篇是 翻译《The Old New Thing》 - The scratch program 姊妹篇&#xff0c;对 scratch 程序作…

普通人副业要趁早,5种靠谱且持久的赚钱副业

中年危机、35岁被裁&#xff0c;这些听起来就让人焦虑的词汇&#xff0c;是否也让你感到不安&#xff1f;别担心&#xff0c;只要你早早开启副业之旅&#xff0c;这些都不是问题。 今天&#xff0c;我要为你介绍的这5种副业&#xff0c;不仅能帮你赚钱&#xff0c;还能让你的能…

前端高频面试题 5.08

事件委托 事件委托是前端开发中常用的一种优化性能和代码可维护性的方法&#xff0c;它基于DOM的事件冒泡机制。当一个元素触发事件时&#xff0c;这个事件会按照从顶层到底层的顺序传播&#xff0c;直到最底层的元素&#xff08;通常是文档的根节点&#xff09;。事件委托利用…
最新文章