【OSG原理与源码分析】OSG多线程模块:OpenThreads之C++跨平台多线程编程库那点事

简介本文将介绍跨平台多线程库的设计方案,还将介绍开源三维图形框架OSG(Open Scene Graph)中的跨平台多线程库OpenThreads的初步理解的一些基础知识。
摘要由CSDN通过智能技术生成

简介
本文将介绍跨平台多线程库的设计方案,还将介绍开源三维图形框架OSG(Open Scene Graph)中的跨平台多线程库OpenThreads的初步理解的一些基础知识。

正文

线程有关的概念

CPU亲缘性

通常所讲的一个CPU是指一个物理处理器,而一个物理处理器可以有多个核心,每一个核心又可以由两个处理器单元组成,每一个处理器单元就是一个逻辑处理器。注意这里的CPU指的是逻辑处理器,也就是对于通常讲的4核双线程CPU,逻辑处理器的数据量是8。逻辑处理器的含义的具体介绍可参考这里

本文不打算具体展开介绍线程亲缘性的概念,对此感兴趣的读者可以参考这里:
What is and How does Setting CPU Affinity Improve Performance?
CPU亲缘性实际上是设置线程的CPU亲缘性,也就是控制指定的线程在哪一个逻辑处理器单元上运行。从前述参考资料可以看到,设置CPU亲缘性对一些CPU缓存密集型应用程序有一定的性能优化的作用。

线程优先级

线程优先级影响线程的调度结果,优先级高的线程获得运行机会的概率更高。
OpenThread库在Thread类中定义的线程优先级:

   //线程优先级
    enum ThreadPriority {
   

        THREAD_PRIORITY_MAX,      /**< The maximum possible priority  */
        THREAD_PRIORITY_HIGH,     /**< A high (but not max) setting   */
        THREAD_PRIORITY_NOMINAL,  /**< An average priority            */
        THREAD_PRIORITY_LOW,      /**< A low (but not min) setting    */
        THREAD_PRIORITY_MIN,      /**< The miniumum possible priority */
        THREAD_PRIORITY_DEFAULT   /**< Priority scheduling default    */

    };
  

Windows系统定义的线程优先级:

THREAD_PRIORITY_IDLE
THREAD_PRIORITY_LOWEST
THREAD_PRIORITY_BELOW_NORMAL
THREAD_PRIORITY_NORMAL
THREAD_PRIORITY_ABOVE_NORMAL
THREAD_PRIORITY_HIGHEST
THREAD_PRIORITY_TIME_CRITICAL

Linux系统线程优先级在从-20到+19范围之内。因此不同OS中线程优先级的定义是不相同的。
因此OpenThreads中的线程优先级最终只能映射到具体操作系统的线程优先级上面去。

参考资料:

Windows进程和线程优先级的具体介绍可参考以下文章:

Processes, Threads, and Jobs in the Windows Operating System

Scheduling Priorities

线程调度策略

不同的线程调度策略使用不同的调度算法。

OpenThreads库中Thread类中定义的线程调度策略:


    //线程调度策略
    enum ThreadPolicy {
   
        THREAD_SCHEDULE_FIFO,        /**< First in, First out scheduling         */
        THREAD_SCHEDULE_ROUND_ROBIN, /**< Round-robin scheduling (LINUX_DEFAULT) */
        THREAD_SCHEDULE_TIME_SHARE,  /**< Time-share scheduling (IRIX DEFAULT)   */
        THREAD_SCHEDULE_DEFAULT      /**< Default scheduling                     */

    };

FIFO: 先进先出。高优先级线程抢占低优先级线程的时间片。属于实时调度,线程优先级起作用。

ROUND_ROBIN:轮询调度。在FIFO的基础上限制了每一个线程的最长运行时间。所有线程都可以获得执行的机会。属于实时调度,线程优先级起作用。

TIME_SHARE:分时调度。属于普通调度,线程优先级不

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值