4C++多线程并发高级知识由该线程执行任务->任务执行完毕后销毁线程。即使需要使用到大量线程,每个线程都要按照这个流程来创建、执行与销毁。虽然创建与销毁线程消耗的时间远小于线程执行的时间,但是对于需要频繁创建大量线程的任务,创建与销毁线程所占用的时间与CPU资源也会有很大占比。为了减少创建与销毁线程所带来的时间消耗与资源消耗,因此采用线程池的策略:程序启动后,预先创建一定数量的线程放入空闲队列中,这些线程都是处于阻塞状态,基本不消耗CPU,只占用较小的内存空间。接收到任务后,任务被挂在任务队列,线程池选择一个空闲线程来执行此任务。任务执行完毕后,不销毁线程,线程继续保持在池中等待下一次的任务。线程池所解决的问题:(1)需要频繁创建与销毁大量线程的情况下,由于线程预先就创建好了,接到任务就能马上从线程池中调用线程来处理任务,减少了创建与销毁线程带来的时间开销和CPU资源占用。(2)需要并发的任务很多时候,无法为每个任务指定一个线程(线程不够分),使用线程池可以将提交的任务挂在任务队列上,等到池中有空闲线程时就可以为该任务指定线程。4.1.2线程池的实现可以通过阅读《C++ Concurrency in Action,Second Edition》 9.1章节来学习。线程池确实是难点部分,所以先拖着不更。5延伸拓展5.1线程与进程/并发与并行为了更加准确、专业的表述这两者的联系与区别,这里借用了C++标准委员会成员AnthonyWillianms在书籍《C++ Concurrency inAction, Second Edition》中的表述(强推这本书,写的真的很好):并发的两种方式:双核及其的真正并行、单核机器的任务切换并发的两种基本途径:多进程并发、多线程并发多进程并发:优点是更容易编写安全的并发代码(操作系统为进程通信提供了一定的保护措施)、可分布式(可以通过远程连接的方式在不同的计算机上独立运行进程);缺点是进程开销大、启动慢,进程之前的通信复杂耗时。多线程并发:优点是共享内存+的灵活性(进程中的所有线程共享内存地址空间。虽然进程之前也共享内存,但这种共享通常是难以管理的,因为同一数据的内存地址在不同的进程中是不同的),缺点是编写代码时工作量大(需要保证多个线程访问到的共享数据是一致的)结论是,多个进程(每个进程只包含单一线程)比多个线程(单一进程包含的多个线程)的开销大,若不考虑共享内存所带来的问题,多线程将会成为主流语言更加青睐的并发途径。并发与并行:对于多线程来说,两者概念大部分重叠,意思近乎相同,只是侧重点不同,关注于使用当前可用硬件来提高批量数据处理的速度时,我们讨论程序的并行性+,关注于任务分离或任务响应时,就会讨论到程序的并发性。(我的理解:并发概念中涵盖了并行)5.2创建线程时的传参问题分析ästd::thread th1(proc1)”,创建线程时需要传递函数名作为参数,提供的函数对象+会复制到新的线程的内存空间中执行与调用。如果用于创建线程的函数为含参函数,那么在创建线程时,要一并将函数的参数传入。常见的,传入的参数的形式有基本数据类型(int,char,string等)、引用、指针、对象这些,下面总结了传递不同形式的参数时std:thread类的处理机制,以及编写程序时候的注意事项。本章节只给出了部分示例代码,没有必要为了证明处理机制而举例大量简单代码而使得文章冗长,但是推荐新手自行编写程序研究。总体来说,std:thread的构造函数会拷贝传入的参数:1.当传入参数为基本数据类型(int,char,string等)时,会拷贝一份给创建的线程;2.当传入参数为指针时,会浅拷贝*一份给创建的线程,也就是说,只会拷贝对象的指针,不会拷贝指针指向的对象本身。3.当传入的参数为引用时,实参必须用ref(函数处理后传递给形参,否则编译不通过,此时不存在“拷贝”行为。引用只是变量的别名,在线程中传递对象的引用,那么该对象始终只有一份,只是存在多个别名罢了(注意把引用与指针区别开:指针是一块内存指向另一块内存,指针侧重“指向”二字;引用是只有一块内存,存在多个别名。理解引用时不要想着别名“指向”内存,这是错误的理解,这样的理解会导致分不清指针和引用,别名与其本体侧重于“一体”二字,引用就是本体,本体就是引用,根本没有“指向”关系。);复制代码includeusing namespace std;void proc(int& x)cout
THE END
- 本文链接:
- https://zxki.cn/wzym/55769.html
- 版权声明:本站提供的一切软件、教程和内容信息仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。本站信息来自网络收集整理,如果您喜欢该程序和内容,请支持正版,购买注册,得到更好的正版服务。我们非常重视版权问题,如有侵权请邮件与我们联系处理。敬请谅解!
请登录后发表评论
注册
停留在世界边缘,与之惜别