• std::get<C++11多线程库~线程管理>(09):运行时决定线程数量


     1 #include <QCoreApplication>
     2 #include <thread>
     3 #include <iostream>
     4 #include <algorithm>
     5 #include <vector>
     6 
     7 /*
     8  * 话题1: 运行时决定线程的数量。
     9  *        线程的数量并非越多越好,线程间的上下文切换是需要时间开销的,保存线程的上下文是需要空间开销的。
    10  *
    11  *        那一个进程到底拥有几个线程比较合理,需根据实际情况处理。 这里讲一个非常有用的函数:std::thread::hardware_concurrency()
    12  *        该函数可以获取一个应用程序最多支持的线程数量。
    13 */
    14 struct run{
    15     run(short id):m_id(id){}
    16     void operator()(){
    17         std::cout<<"run id is "<<m_id<<std::endl;
    18     }
    19 
    20 private:
    21     short m_id;
    22 };
    23 
    24 int main(int argc, char *argv[])
    25 {
    26     QCoreApplication a(argc, argv);
    27 
    28     unsigned long const hardware_num = std::thread::hardware_concurrency();
    29     std::cout<<"hardware number is = "<<hardware_num<<std::endl;
    30 
    31     unsigned long const thread_num_max = 5;
    32     unsigned long thread_num = std::min(hardware_num, thread_num_max);
    33     std::vector<std::thread> threads;
    34     for (; thread_num; --thread_num){
    35         threads.push_back(std::thread(run(thread_num)));
    36     }
    37     std::for_each(threads.begin(), threads.end(), std::mem_fn(&std::thread::join));
    38     return a.exec();
    39 }

    #include<QCoreApplication>
    #include<thread>
    #include<iostream>
    #include<algorithm>
    #include<vector>
    
    
    /*
    *话题1:运行时决定线程的数量。
    *线程的数量并非越多越好,线程间的上下文切换是需要时间开销的,保存线程的上下文是需要空间开销的。
    *
    *那一个进程到底拥有几个线程比较合理,需根据实际情况处理。这里讲一个非常有用的函数:std::thread::hardware_concurrency()
    *该函数可以获取一个应用程序最多支持的线程数量。
    */
    structrun{
    run(shortid):m_id(id){}
    voidoperator()(){
    std::cout<<"runidis"<<m_id<<std::endl;
    }
    
    
    private:
    shortm_id;
    };
    
    
    intmain(intargc,char*argv[])
    {
    QCoreApplicationa(argc,argv);
    
    
    unsignedlongconsthardware_num=std::thread::hardware_concurrency();
    std::cout<<"hardwarenumberis="<<hardware_num<<std::endl;
    
    
    unsignedlongconstthread_num_max=5;
    unsignedlongthread_num=std::min(hardware_num,thread_num_max);
    std::vector<std::thread>threads;
    for(;thread_num;--thread_num){
    threads.push_back(std::thread(run(thread_num)));
    }
    std::for_each(threads.begin(),threads.end(),std::mem_fn(&std::thread::join));
    returna.exec();
    }
    
    
  • 相关阅读:
    CentOS6.5 mini安装到VirtualBox虚拟机中
    docker配置redis6.0.5集群
    docker搭建数据库高可用方案PXC
    我通过调试ConcurrentLinkedQueue发现一个IDEA的小虫子(bug), vscode复现, eclipse毫无问题
    ThreadLocal底层原理学习
    第九章
    多线程-java并发编程实战笔记
    Spring-IOC源码解读3-依赖注入
    Spring-IOC源码解读2.3-BeanDefinition的注册
    Spring-IOC源码解读2.2-BeanDefinition的载入和解析过程
  • 原文地址:https://www.cnblogs.com/azbane/p/15366443.html
Copyright © 2020-2023  润新知