.NET 多线程开发总结(一)——并行、并发、异步、同步的概念区分

最近一段时间,着手Web后端开发,本着求真务实的精神,遂决定把多线程开发从头梳理一遍,以便日后翻查。

这头一节只是对基本概念的一个梳理,如果对它们比较了解的朋友,可以直接跳过哈。


说到这些个概念,就不得不提我们的CPU,它是整个计算机的核心,也就相当于人类的大脑。
如此一来,我们可以用现实生活中的情形来类比说明这几个概念:

1、并行和并发

并行:英文单词是parallel,意思是平行的。就好比操场跑道有多个赛道,可以同时有多名运动员进行比赛,而不会互相干扰。换做计算机,就是多个逻辑运算单元可以同时进行运算,以达到时间上的充分利用。那么这里有个前提就是多核,单核CPU就无法实现真正意义上的并行了。

并发:英文单词是concurrence,意思是同时发生。这种描述对时间上的要求就不是那么严格,是人为感知意义上的同时。比如你吃饭的时候打电话,你的嘴巴既需要咀嚼,又要说话,表面上你是在同时进行两件事,但实际上它们是交错进行的。于是,并发就可以理解为交错发生

2、异步和同步

这两个概念很容易和日常说法混淆,比如我们说放电影,应当是音画同步进行的,但在计算机术语中这其实是“异步”,指两个线程同时执行任务,相互之间没有阻碍,一方发生阻塞另一方仍能进行。
比如放电影的过程中突然没有画面了,但是声音还是能继续播放的。

以上是对异步的概念解析,那什么是同步呢?

同步实际是顺序执行,可以是单线程,也可以是多线程。
单线程很好理解,因为我们的代码是顺序执行的,在同一线程中会执行完一个方法再执行下一个方法。
而多线程就没那么容易控制,谁先谁后执行我们无法预料,因此要想实现线程间同步,需要我们加以干涉,主动等待线程结束,再继续执行后面的方法。
这里的等待也分两种:一种是阻塞等待,一种是非阻塞等待。
阻塞等待就是等待过程不能做其他事情,如果是UI线程被阻塞,那么界面就会假死,无法进行任何操作;
非阻塞等待就是为了解决等待的过程还能正常进行其他的事情,比如我们界面点击保存需要一个较长时间的等待,如果一直阻塞在那里,则用户体验会很不好。用非阻塞的方式,可以让用户还能做些其他的不影响保存结果的事情,至少能让界面不出现假死现象,好让用户知道后台是在正常运行的。

下一篇:.NET 多线程开发总结(二)——Thread、ThreadPool、Task、Parallel的简单使用

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值