Linux线程抢占:提高多线程运行效率的利器 (linux线程抢占)

随着现代计算机CPU的核心数量越来越多,多线程编程已成为现代程序员必备技能。然而,多线程编程的一个常见问题就是线程抢占,它能够显著影响程序的性能。在Linux环境中,线程抢占已经被纳入操作系统核心中,多线程编程者可以利用这种机制,提高程序的运行效率。

什么是线程抢占?

线程抢占是指当多个线程同时运行时,操作系统根据规则强制立即停止当前正在运行的线程,并让优先级高的线程接管CPU的时间片。因此,线程抢占是一种优先级管理机制,它允许更高优先级的线程优先处理,以确保系统得到更好的响应时间和性能。

Linux系统的线程抢占

Linux系统自2023年内核版本2.6.23之后,实现了基于时间片和实时优先级两种策略的线程抢占机制。这个机制可以让操作系统切换线程时执行更平稳,以提高多线程程序的响应度和运行效率。

Linux抢占的两种策略

在时间片策略中,线程执行的时间是有限制的,Linux允许操作系统协调线程,从而确保每个线程都有足够的时间片来执行自己的任务。

实时优先级策略允许使用程序员指定线程的优先级,以确保关键线程能够得到必要的处理时间。如果在程序执行期间,更高优先级的线程被创建或是发生特定事件,会对低优先级线程进行抢占。

利用线程抢占提高多线程运行效率

线程抢占机制在现代程序设计中发挥了重要作用。例如,在多线程服务器应用程序中,可以充分利用线程抢占机制来更好地分配工作负载。操作系统可以自动根据程序优先级分配运行时间,从而提高并发处理的效率。

此外,在高性能系统中,利用线程抢占来控制系统运行速度,从而更好地优化CPU资源,可以带来更高的性能。

线程抢占的局限性

尽管线程抢占是一个强大的工具,但并非所有编程环境都能充分利用它。例如,当程序已经使用了某些I/O操作时,线程抢占适用性会大大降低,因为在某些操作执行期间,线程无法响应操作系统的抢占任务。

此外,多线程程序的缺陷也可能与线程抢占有关。如果线程的优先级无法正确设置,程序可能会在高负荷运行期间出现死锁或其他异常情况,而线程抢占仅是一个缓解这些问题的工具之一。

作为现代计算机编程的一部分,多线程程序运行效率的提高一直是重要的挑战。利用Linux线程抢占机制,在多线程编程中实现对CPU时间的更好利用。无论是在高负载服务器还是高性能计算机环境中,都可以通过线程抢占来优化系统性能和提高并发效率。但是,线程抢占不是万能的,程序员必须谨慎处理线程的优先级,才能充分发挥线程抢占的优势。

相关问题拓展阅读:

  • 严重关注:在嵌入试LINUX系统该使用哪个线程库

严重关注:在嵌入试LINUX系统该使用哪个线程库

严重关注: 在嵌入试LINUX系统该使用哪个线程库?:30:02

分类: LINUX

在Redhat9.0下面, 创建一个进程。getpid();得到进程ID,然后在进程里用pthreadcreate几个线程,在线程里调用getpid, pthreadgetselfid()的到进程ID和线程ID, 发现该线程的进程ID和它所属的进程ID是一样的, 线程ID却逗罩不同。当是在小机里用gcc里的线程库,得到的结果是线程ID和进程ID是不同的,即线程山拿闹也当作进程来对待,而且多了几个其它线程在运行,若线程当作进程来对待效率是比较低的。在网上查了下linux的线程库,发现新内核中的LD用的是The Native POSIX Thread Library (NPTL), 而小机上用的是老的GCC里的线程库。

如何在Redhat9上面用老的线程库呢,在系统环境变量中加入LD_ASSUME_KERNEL=2.4.19就OK了

因为老版本内核中是不用NPTL库的, 这样LD连接程序的时候就不用NPTL, 在PC LINUX的

小机模拟器的模拟就和小机一样不用NPTL了。

那么到底是不是该把小机的线程库换成NPTL呢, 看看来自

的测试吧:

Linux 线程库性能测试与分析

杨沙洲国防科技大学计算机学院

2023 年 7 月 01 日

NPTL 成为 glibc “正选”线程库后,它的性能如何受到很多人的关注。本文就针对NPTL 与 LinuxThreads 的性能比较,以及超线程、内核可抢占等特性对线程性能的影响进行了全面评测。

一、 前言

在 Linux 2.6.x 内核中,调度性能的改进是其中最引人注目的一部分。NPTL(Native Posix Thread Library)使用内核的新特性重写敏游了 Linux 的线程库,取代历史悠久而备受争议的 LinuxThreads 成为 glibc 的首选线程库。

NPTL 的性能究竟如何?相对 LinuxThreads 又有哪些明显的改进?在对NPTL进行全面分析之前,本文针对这两种线程库,以及内核中”内核可抢占”(Preemptible)和超线程(HyperThreading)等特性进行了全面的性能评测,结果表明NPTL绝对值得广大服务器系统期待和使用。

回页首

二、 Benchmark

1. 测试平台

进行本测试的硬件平台为浪潮NF420R服务器,4个Hyperthreading-enabled Intel Xeon 2.2G处理器,4G内存。Linux选择了Slackware 9.0发行版,所使用的内核源码来自

www.kernel.org

2. 针对测试:LMBench

lmbench是一个用于评价系统综合性能的多平台开源benchmark,但其中没有对线程的支持。其中有两个测试进程性能的benchmark:lat_proc用于评测进程创建和终止的性能,lat_ctx用于评测进程切换的开销。lmbench拥有良好的benchmark结构,只需要修改具体的Target程序(如lat_proc.c和lat_ctx.c),就可以借用lmbench的计时、统计系统得到我们关心的线程库性能的数据。

基于lat_proc和lat_ctx的算法,本文实现了lat_thread和lat_thread_ctx两个benchmark。在lat_thread中,lat_proc被改造成使用线程,用pthread_create()替代了fork(),用pthread_join()替代wait();在lat_thread_ctx中,沿用lat_ctx的评测算法(见lat_ctx手册页),将创建进程的过程改写为创建线程,仍然使用管道进行通信和同步。

lat_thread null

null参数表示线程不进行任何实际操作,创建后即刻返回。

lat_thread_ctx -s #threads

size参数与lat_ctx定义相同,可表示线程的大小(实际编程时为分配K数据;#threads参数为线程数,即参与令牌传递的线程总数,相当于程序负载情况。

3. 综合测试:Volanomark

volanomark是一个纯java的benchmark,专门用于测试系统调度器和线程环境的综合性能,它建立一个模拟Client/Server方式的Java聊天室,通过获取每秒平均发送的消息数来评测宿主机综合性能(数值越大性能越好)。Volanomark测试与Java虚拟机平台相关,本文使用Sun Java SDK 1.4.2作为测试用Java平台,Volanomark版本2.5.0.9。

回页首

三、 测试结果

测试计划中将内核分为2.4.26、2.6.6/支持内核抢占和2.6.6/不支持内核抢占三类;通过配置内核以及NF420R的BIOS实现三类P规模:单处理机(UP)、4CPU的P(P4)和打开超线程支持的虚拟8CPU P(P8*)。内核配置和P规模的每一种组合都针对LinuxThreads和NPTL使用lat_thread、lat_thread_ctx和volanomark获取一组数据。由于NPTL无法在2.4.x内核上使用,该项数据空缺。

回页首

四、 结果分析

1. LinuxThreads vs NPTL:线程创建/销毁开销

使用2.6.6/preemptible内核配置下UP和P4的测试数据获得下图:

图1

在线程创建/销毁开销方面,NPTL的改进相当明显(降低约600%)。实际上,NPTL不再像LinuxThreads那样需要使用用户级的管理线程来维护线程的创建和销毁,因此,很容易理解它在这方面的开销能够大幅度降低。

同时,由图可见,单CPU下创建线程总是比多CPU下迅速。

2. LinuxThreads vs NPTL:线程切换开销

同样使用2.6.6/preemptible内核配置下UP和P4的数据:

图2

随着lat_thread_ctx的参与线程增多,不管是哪个线程库,单处理机条件下的线程切换开销都陡峭上升,而P条件下则上升比较平缓。在这方面,LinuxThreads和NPTL表现基本相同。

3. 内核影响

图3

图4

图5

图6

从上面四张图中我们可以得出两点结论:

“内核可抢占”是Linux对实时应用提供更好支持的有力保障,但对线程性能影响很小,甚至有一点损失,毕竟抢占锁的开销不可忽略;

升级内核并不会对LinuxThreads线程库性能带来多少变化,因此,对于服务器系统而言,不能指望仅仅编译使用新内核就能提高性能。

图7

图8

从图3、图4我们已经知道,打开超线程支持对线程创建/销毁性能几乎没有影响,而这两张图表也进一步说明,超线程技术对于线程切换开销也没有明显的影响。超线程技术是CPU内部的优化技术,和真正的双CPU完全不同。大量研究表明,如果没有内核与用户应用相结合的专门优化措施,超线程并不会带来很大的性能变化。除非是高负载综合服务器系统(例如繁忙的数据库系统),购买超线支持的CPU并不能带来多少好处。

4. 综合性能

图9

图9

前面几节分析让我们了解了线程库性能改进的细节,通过volanomark测试,我们可以近似得到在综合应用环境下,特别是网络服务需求中线程库以及内核对系统整体性能的影响程度。

图9综合了不同内核、不同处理机数条件下,两种线程库的volanomark结果。从图中可以观察到以下三点:

NPTL能极大提高P环境下服务器系统的整体性能(超过65%),相对而言,对单处理机系统影响较小(10%左右);

2.6内核的抢占特性对系统性能影响很小(不超过±1%),某些情况下甚至有所下降;

超线程技术在LinuxThreads中的影响是负面的,在NPTL中是正面的,但影响幅度都很小(5%-6%)。

关于linux线程抢占的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。

香港服务器首选树叶云,2H2G首月10元开通。
树叶云(shuyeidc.com)提供简单好用,价格厚道的香港/美国云服务器和独立服务器。IDC+ISP+ICP资质。ARIN和APNIC会员。成熟技术团队15年行业经验。

文章来源网络,作者:运维,如若转载,请注明出处:https://shuyeidc.com/wp/171775.html<

(0)
运维的头像运维
上一篇2025-03-23 00:38
下一篇 2025-03-23 00:39

相关推荐

  • 个人主题怎么制作?

    制作个人主题是一个将个人风格、兴趣或专业领域转化为视觉化或结构化内容的过程,无论是用于个人博客、作品集、社交媒体账号还是品牌形象,核心都是围绕“个人特色”展开,以下从定位、内容规划、视觉设计、技术实现四个维度,详细拆解制作个人主题的完整流程,明确主题定位:找到个人特色的核心主题定位是所有工作的起点,需要先回答……

    2025-11-20
    0
  • 社群营销管理关键是什么?

    社群营销的核心在于通过建立有温度、有价值、有归属感的社群,实现用户留存、转化和品牌传播,其管理需贯穿“目标定位-内容运营-用户互动-数据驱动-风险控制”全流程,以下从五个维度展开详细说明:明确社群定位与目标社群管理的首要任务是精准定位,需明确社群的核心价值(如行业交流、产品使用指导、兴趣分享等)、目标用户画像……

    2025-11-20
    0
  • 香港公司网站备案需要什么材料?

    香港公司进行网站备案是一个涉及多部门协调、流程相对严谨的过程,尤其需兼顾中国内地与香港两地的监管要求,由于香港公司注册地与中国内地不同,其网站若主要服务内地用户或使用内地服务器,需根据服务器位置、网站内容性质等,选择对应的备案路径(如工信部ICP备案或公安备案),以下从备案主体资格、流程步骤、材料准备、注意事项……

    2025-11-20
    0
  • 如何企业上云推广

    企业上云已成为数字化转型的核心战略,但推广过程中需结合行业特性、企业痛点与市场需求,构建系统性、多维度的推广体系,以下从市场定位、策略设计、执行落地及效果优化四个维度,详细拆解企业上云推广的实践路径,精准定位:明确目标企业与核心价值企业上云并非“一刀切”的方案,需先锁定目标客户群体,提炼差异化价值主张,客户分层……

    2025-11-20
    0
  • PS设计搜索框的实用技巧有哪些?

    在PS中设计一个美观且功能性的搜索框需要结合创意构思、视觉设计和用户体验考量,以下从设计思路、制作步骤、细节优化及交互预览等方面详细说明,帮助打造符合需求的搜索框,设计前的规划明确使用场景:根据网站或APP的整体风格确定搜索框的调性,例如极简风适合细线条和纯色,科技感适合渐变和发光效果,电商类则可能需要突出搜索……

    2025-11-20
    0

发表回复

您的邮箱地址不会被公开。必填项已用 * 标注