C++ 线程 多线程 线程池

01

 

引言

理解线程、多线程、线程池的概念和用法。

 

02

 

基本概念

线程:线程是操作系统调度的最小单元,每个线程都拥有各自的计数器、堆栈和局部变量等属性,在进行中负责程序执行的执行单元,多个线程组成了一个进程,一个进程中至少有一个线程。

多线程:解决多任务同时执行的需求,合理使用CPU资源。多线程的运行是根据CPU切换完成,如何切换由CPU决定,因此多线程运行具有不确定性。

线程池:基本思想还是一种对象池的思想,开辟一块内存空间,里面存放了众多(未死亡)的线程,池中线程执行调度由池管理器来处理。当有线程任务时,从池中取一个,执行完成后线程对象归池,这样可以避免反复创建线程对象所带来的性能开销,节省了系统的资源。

 

03

 

优缺点

对于线程:一个线程在一个时刻只能运行在一个处理器核心上,使用多线程技术,将计算逻辑分配到多个处理器核心上,就会显著减少程序的处理时间,变得更有效率。

对于多线程:优点,a. 多线程技术使程序的响应速度更快;b.当前没有进行处理的任务时可以将处理器时间让给其他任务;c.占用大量处理时间的任务可以定期将处理器时间让给其他任务;d.可以随时停止任务;e.可以分别设置各个任务的优先级以优化性能。缺点,a.等候使用共享资源时造成程序的运行速度变慢;b.对线程进行管理要求额外的CPU开销,线程的使用会给系统带来上下文切换的额外负担;c.线程的死锁,即对共享资源加锁实现同步的过程中可能会死锁;d.对公有变量的同时读或写,可能对造成脏读等;e.线程创建和销毁会造成消耗;

对于线程池:降低资源消耗;可以重复利用已创建的线程来降低线程创建和销毁造成的消耗;提高响应速度;当任务到达时,任务可以不需要等到线程创建就能立即执行;提高线程的可管理性;线程是稀缺资源,如果无限制创建,不仅会消耗系统资源,还会降低系统的稳定性,使用线程池可以进行统一分配、调优和监控。

 

04

 

简单示例

在 C++ 中,你可以使用线程来实现并发执行的多个任务。C++ 标准库提供了 <thread> 头文件中的 std::thread 类,它可以用来创建和管理线程。下面是一个使用 C++ 线程的简单示例:

 

#include <iostream>#include <thread>

void myFunction() {    std::cout << "Hello from thread!" << std::endl;}

int main() {    std::thread myThread(myFunction);  // 创建线程,并指定要执行的函数    myThread.join();  // 等待线程执行完毕    std::cout << "Hello from main thread!" << std::endl;    return 0;}

Hello from thread!

Hello from main thread!

 

线程池是一种用于管理和复用线程的技术。它可以在应用程序中预先创建一组线程,然后将任务分配给这些线程,以便在不同的任务之间共享线程资源,并避免不断创建和销毁线程的开销。

虽然 C++ 标准库没有直接提供线程池的实现,但你可以使用第三方库如 Boost 或 PPL 来实现线程池功能。这些库提供了线程池类,使你可以方便地创建和管理线程池,分配任务给线程执行。可以尝试下使用第三方库的Threadpool。比如,

GitHub - progschj/ThreadPool: 

A simple C++11 Thread Pool implementation

 

  • 5
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值