第12课:掌握线程同步,让复杂工作流协调有序

从根本上说,多线程编程的最终目的,就是最大限度地利用 CPU 的计算资源,尽量让所有的 CPU 核心都保持忙碌状态。

这里有两方面的意思:

  • 一是不要让 CPU 闲下来,保持它始终有工作做;
  • 二是尽量让所有的 CPU 都有大体相当的负载,不要出现有的 CPU 核心很忙,而有的 CPU 核心却没事可做的情况。

CPU 什么时候会闲下来呢?最常见的情况就是在等待 I/O 操作的时候,所以,当某些工作需要进行 I/O 操作时,就应该放在独立的线程中去完成,在 CPU 等待 I/O 操作的时间内,让其他的线程可以有机会获得 CPU 资源,从而提高程序的并行化水平。

此外,一个线程在同一时刻只能运行在一个 CPU 核心上。在多核已经成为主流配置的今天,如果一个应用只开启一两个线程,也不利于 CPU 的充分利用,所以,把一个应用中多个相干性很少的处理任务,分成多个不同的线程去执行,也能提高 CPU 的利用效率。

但是,服务于同一应用的多个线程,总是会有或多或少的联系,在程序表现上,就是不同的线程会时不时地访问或更新相同的共享数据,或者在某些特定的时间点上需要保证特定的线程执行顺序。这就要通过线程同步技术来实现

在《第 05 课:理解线程实现,达成高效率与低复杂度》中,我们已经介绍过一种最常用的临界区保护技术:互斥锁,它能保证在同一时刻最多只有一个线程能获取到某个共享数据的访问权限,其他同时试图获取访问权限的线程会被阻塞,直到前一个线程已经从临界区内退出。

互斥锁是一种非常有效,而

评论将由博主筛选后显示,对所有人可见 | 还能输入1000个字符 “速评一下”
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页
实付 49.90元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值