多线程相关的一些术语 (持续更新)

本文旨在系统性地探讨多线程领域的核心概念,包括并发、并行与异步的区别与联系,以及如何在实际编程中合理应用这些概念。文章深入剖析了并发与并行的本质区别,解释了异步编程的优势与限制,并提供设计原则以指导多线程编程实践。

引子

以前一直没有系统地学习下多线程方面的知识,对很多概念也是一知半解。这次借着博客记录下学习的经历,也督促自己系统地学习下这个领域的知识。

在深入学习多线程的知识之前,起码要将本章的这些术语有基本的认识。


并发 Concurrency

主要强调有同一时间可以有多个独立的任务存在,但是他们不一定同时处于活动状态。也就是强调将原有的串行任务,并行化。
并发最终的实现,可能仍然是串行化的方式。
比如,在单处理器环境下,同一时间只能有一个任务被执行;这时,并发仍然是串行化的方式,通过任务调度等策略实现多个任务交替运行的伪并行。

并行 Parallelism

并发的多任务(也称为序列)同时处于活动状态。这个只能在多处理器环境下才能实现。
单处理器环境下,没有真正的并行,只有通过任务调度等方式实现的伪并行。

异步 Asynchronous

表明事情相互独立地发生。除非有强加的依赖性。
我们的世界就是异步的,依赖性也是大自然补充的,彼此毫不相干的事情可以同时发生。

注意:

  • 现实生活中,并发和并行是同一个意思,都是指同时发生。只是软件开发中,并发不完全等于并行。
  • 如果,同一时间内没有多个事情同时发生的话,采用异步编程就没有什么优势了。
  • 比如,我们开启了一项任务,然后什么都不做等待它结束,这样就没有从异步的方式那里获得什么优势。

同步

多线程的环境下,同步的语义和字典中的是对立的。
  1. 字典里,同步的含义是同时发生;
  2. 而在多线程设计下,同步的含义其实是【协调】的意思。(“阻止同时发生的机制”)
  3. 保证多个线程实体entity能够协调完成工作。

设计原则

  1. 一般的原则是尽量对数据的访问进行控制,而不是对线程的代码进行控制;比如应该对共享资源加锁,而不是对线程的代码加上锁。
  2. 确保线程的代码是可重入的。
  3. 多线程设计的一个重点,就是要做出适当的取舍,我们需要足够的线程和通信,而不是更多的线程和通信。
  4. 可以借鉴现实生活中的例子,如果在现实中也无意义,就不要妄图在程序中实现它。
  5. 借鉴其他领域的知识。
    其实,很容易记住并行的概念!在硬件术语中,并口的英文就是Parallel Port,多个pin脚同时传递信号。
    硬件的世界就是一个并行、异步的世界,他们由一个个局部电路组成,相互之间通过接口、同步时钟信号等完成同步。所以,日光之下并无新事!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值