引子
以前一直没有系统地学习下多线程方面的知识,对很多概念也是一知半解。这次借着博客记录下学习的经历,也督促自己系统地学习下这个领域的知识。
在深入学习多线程的知识之前,起码要将本章的这些术语有基本的认识。
并发 Concurrency
主要强调有同一时间可以有多个独立的任务存在,但是他们不一定同时处于活动状态。也就是强调将原有的串行任务,并行化。
并发最终的实现,可能仍然是串行化的方式。
比如,在单处理器环境下,同一时间只能有一个任务被执行;这时,并发仍然是串行化的方式,通过任务调度等策略实现多个任务交替运行的伪并行。
并行 Parallelism
并发的多任务(也称为序列)同时处于活动状态。这个只能在多处理器环境下才能实现。
单处理器环境下,没有真正的并行,只有通过任务调度等方式实现的伪并行。
异步 Asynchronous
表明事情相互独立地发生。除非有强加的依赖性。
我们的世界就是异步的,依赖性也是大自然补充的,彼此毫不相干的事情可以同时发生。
注意:
- 现实生活中,并发和并行是同一个意思,都是指同时发生。只是软件开发中,并发不完全等于并行。
- 如果,同一时间内没有多个事情同时发生的话,采用异步编程就没有什么优势了。
- 比如,我们开启了一项任务,然后什么都不做等待它结束,这样就没有从异步的方式那里获得什么优势。
同步
多线程的环境下,同步的语义和字典中的是对立的。
- 字典里,同步的含义是同时发生;
- 而在多线程设计下,同步的含义其实是【协调】的意思。(“阻止同时发生的机制”)
- 保证多个线程实体entity能够协调完成工作。
设计原则
- 一般的原则是尽量对数据的访问进行控制,而不是对线程的代码进行控制;比如应该对共享资源加锁,而不是对线程的代码加上锁。
- 确保线程的代码是可重入的。
- 多线程设计的一个重点,就是要做出适当的取舍,我们需要足够的线程和通信,而不是更多的线程和通信。
- 可以借鉴现实生活中的例子,如果在现实中也无意义,就不要妄图在程序中实现它。
- 借鉴其他领域的知识。
其实,很容易记住并行的概念!在硬件术语中,并口的英文就是Parallel Port,多个pin脚同时传递信号。硬件的世界就是一个并行、异步的世界,他们由一个个局部电路组成,相互之间通过接口、同步时钟信号等完成同步。所以,日光之下并无新事!
本文旨在系统性地探讨多线程领域的核心概念,包括并发、并行与异步的区别与联系,以及如何在实际编程中合理应用这些概念。文章深入剖析了并发与并行的本质区别,解释了异步编程的优势与限制,并提供设计原则以指导多线程编程实践。

1385

被折叠的 条评论
为什么被折叠?



