C++ 多线程笔记2 线程同步

并发(Concurrency)和并行(Parallelism)

并发是指在单核CPU上,通过时间片轮转的方式,让多个任务看起来像是同时进行的。实际上,CPU在一个时间段内只会处理一个任务,但是由于切换时间非常快,用户感觉像是多个任务同时在进行。
这种方式的优点是可以充分利用CPU资源,提高系统的响应能力。然而,由于CPU需要频繁地切换任务,这会带来上下文切换的开销,可能会导致系统效率下降。

并行处理是指多核CPU在同一时刻同时处理多个任务。每个核心都有自己的独立寄存器和运算单元,可以独立地执行任务。这种方式的优点是可以显著提高系统的处理能力,因为多个任务可以真正的同时进行。
然而,并行处理也有其缺点。首先,不是所有的任务都可以并行化,有些任务可能更适合串行执行。其次,并行处理需要更多的硬件资源,如内存和总线带宽,这可能会增加系统的成本。

IO密集型程序和CPU密集型程序

IO密集型程序是那些在执行过程中大部分时间都花费在输入/输出操作上的程序,如文件读写、网络通信等。
CPU密集型程序指的是那些在执行过程中大部分时间都用于计算操作,如数学计算、逻辑运算、数据处理等。

因此IO密集型程序适合采用多线程的并行机制提高性能,而CPU密集型不一定,因为线程的上下文切换太过于耗费CPU时间,所以不是多线程就代表高性能程序。
当如果是多CPU多核的情况下,CPU密集型程序也适合采用多线程执行,充分利用性能。

多线程的线程数量怎么确定

为了完成任务,线程真的越多越好吗?

  • 线程的创建和销毁都是“重操作”,需要与操作系统内核空间进行交互,是相对昂贵的操作。
    在服务执行的过程去实时创建销毁线程。

  • 线程栈本身也会占用大量内存。每一个线程都需要线程栈,栈都被占完了无法做事情。

  • 线程上下文切换要占用大量时间,上下文切换花费的CPU时间也特别多,导致CPU利用率就不高了。

  • 大量线程唤醒会使得系统出现锯齿状负载或者瞬时负载导致宕机

一般会根据CPU的核心数量来确定线程。

线程池的优势

操作系统上创建线程和销毁线程都是很“重“的操作,耗时耗性能都比较多,那么在服务执行的过程中,如果业务量比较大,实时的去创
建线程、执行业务、业务完成后销毁线程,那么会号致系统的实时性能降低,业务的处理能力也会降低。

线程池的优势就是(每个池都有自己的优势),在服务进程启动之初,就事先创建好线程池里面的线程,当业务流量到来时需要分配线
程,直接从线程池中获取一个空

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值