随笔 - 576  文章 - 0  评论 - 62  阅读 - 219万

同步,异步

举例来说:程序员做蛋糕,可以分为以下几个线程:添加水,添加面粉,混合原料。添加水和添加面粉可以异步,因为二者没有先后顺序。添加水和混合原料,添加面粉和混合原料必须同步(这里假定必须水和面粉添加好了,才能混合原料)。

假设只有程序员一个人,一会添加水,一会添加面粉,会降低效率(频繁地切换上下文),最好的做法是把水添加好了,再添加面粉,但是这不符合实际情况。程序员不能同时添加水和添加面粉,增加一个人可以显著提高效率。也就是说,对于异步的情况,可以增加CPU提高执行速度。但是对于同步的情况,增加CPU不起作用,因为有再多的CPU的也没用,必须等待前一个步骤完成。

可以异步的情况:两个步骤没有先后顺序,可以随时的切换(单个CPU),或者同时进行(多个CPU)。

必须同步的情况:两个步骤有先后顺序,必须前一个步骤完成,才能进行下一个步骤。

如果要想通过增加CPU提高执行速度,必须把一个任务分解成互不干扰的步骤。Google的MapReduce本质上就是这样。

可以异步的情况下,如果有多个CPU,采用异步当然提高效率。但是如果只有一个CPU,采用异步会降低效率,因为频繁切换上下文耗资源,但是为什么还采用异步呢?

举例来说,我想一边打游戏一边听歌,当然不能忍受游戏打完了,才能听歌。那么一个CPU必须在游戏程序和播放歌程序之间不停的切换,由于切换的时间非常短,用户实际上感觉不到切换。事实上,一个CPU在任何时刻只能做一件事。

 

posted on   Andy Niu  阅读(253)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
历史上的今天:
2011-12-27 checked、unchecked
2011-12-27 可空值类型
2011-12-27 语法糖
< 2012年12月 >
25 26 27 28 29 30 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

点击右上角即可分享
微信分享提示