Concurrent-Notes
Concurrent Series
📚深入浅出并发编程实践:并发基础、并发控制、并发模型、并发
在线阅读
速览手册
·
Report Bug
·
参考资料
Introduction | 前言
随着处理器技术的发展,单核时代以提升处理器频率来提高运行效率的方式遇到了瓶颈,目前各种主流的
简单定义来看,如果执行单元的逻辑控制流在时间上重叠,那它们就是并发(Concurrent)的;而从分布式一致性模型的定义来看,如果两个操作都没有在彼此之前发生,那么这两个操作是并发的。换句话说,如果两个事件是因果相关的(一个发生在另一个事件之前

本篇主要讨论并发编程理论相关的内容,其精排目录导航版请参考 https://ng-tech.icu/books/Concurrent-Notes。本篇专注于通用的并发理论知识,各语言级别实现可以参考
Nav | 关联导航
应用场景
从计算机系统本身而言,并发被看做是操作系统内核用来运行多个应用程序的机制。很久很久以前是没有并发这个概念的,因为那个时候操作系统并不支持多任务。现在的操作系统今非昔比,支持抢占式任务、多线程、分页、
在单处理器系统中,一个处于运行状态的
while (true){
request = next_http_request()
request_work(request)
}
当
-
在多处理器上进行并行计算:在只有一个
CPU 的单处理器上, 井发流是交替的。在任何时间点上, 都只有一个流在CPU 上实际执行。然而, 那些有多个CPU 的机器, 称为多处理器, 可以真正地同时执行多个流。被分成并发流的并发应用 在这样的机器上能够运行得快很多,这对大规模数据库和科学应用尤为重要。 -
访问慢速
IO 设备:当一个应用正在等待来自慢速IO 设备( 例如磁盘) 的数据到达时,内核会运行其他进程使CPU 保持繁忙。每个应用都可以以类似的方式,通过交替执行IO ,请求和其他有用的工作来使用并发性。 -
与人交互:和计算机交互的人要求计算机同时执行多个任务的能力。例如
, 他们在打印个文档时, 可能想要调整一个窗口的大伽 现代视窗系统利用并发性来提供这种能九 每次用户请求某种操作 忧匕如说通过单击鼠标) 时, 一个独立的并发逻辑流被创建来执行这个操作。 -
通过推迟工作以减少执行时延:有时
, 应用程序能够通过推迟其他操作井同时执行它们, 利用并发性来降低某些操作的延遮 比如, ˉ 一个动态存储分配器可以通过椎迟与酬个运行在较低优先级上的并发 “合井” 流的合并(coalescing), 使用空闲时的CPU 周期, 来降低单个free 操作的延迟。 -
服务多个网络客户端:一个慢速的客户端可能会导致服务器拒绝为所有其他客户端服务。对于闻个真正的服务器来说 可能期望它每秒为成百上千的客户端提供服务
, 某些个慢速客户端寻致拒绝为其他客户端服务, 这是不能接受峋 一个更好的方法是创建一个并发服务糕 它为每个客户端创建各自独立的逻辑流 这就允许服务器同时为多个客户端服务, 并且这也避免了慢速客户端独占服务器。
困难与挑战
在并发程序中,遇到资源竞争时,为了保证线程安全性,通常会引入某种同步手段,保证任意时刻只有一个线程访问资源。但是这种情况下,其它线程会因为等待资源而被挂起,延长总体执行时间,可能会引起线程活跃性问题。我们引入并发程序的目的是为了提高程序的执行性能,活跃性问题让我们与目标背道而驰。
值得一提的是,并发也绝非银弹,在多核的前提下,性能和线程是紧密联系在一起的。线程间的跳转对高频
从编程模型上来看,并发多线程往往也容易引入更多的问题,特别是对基于共享内存与锁的并发模型中,其主要面对如下的问题:
-
“抢占“式的线程切换:你无法确定两个线程访问数据的顺序,一切都很随机
-
“同步“不可组装:同步的代码组装起来也不同步,必须加个更大的同步块
About | 关于
Contributing
Contributions are what make the open source community such an amazing place to be learn, inspire, and create. Any contributions you make are greatly appreciated.
- Fork the Project
- Create your Feature Branch (
git checkout -b feature/AmazingFeature
) - Commit your Changes (
git commit -m 'Add some AmazingFeature'
) - Push to the Branch (
git push origin feature/AmazingFeature
) - Open a Pull Request
Acknowledgements
-
Awesome-Lists: 📚 Guide to Galaxy, curated, worthy and up-to-date links/reading list for ITCS-Coding/Algorithm/SoftwareArchitecture/AI. 💫
ITCS- 编程/ 算法/ 软件架构/ 人工智能等领域的文章/ 书籍/ 资料/ 项目链接精选。 -
Awesome-CS-Books
: :books: Awesome CS Books/Series(.pdf by git lfs) Warehouse for Geeks, ProgrammingLanguage, SoftwareEngineering, Web, AI, ServerSideApplication, Infrastructure, FE etc. :dizzy: 优秀计算机科学与技术领域相关的书籍归档。
Copyright & More | 延伸阅读
笔者所有文章遵循知识共享 署名
