1000字范文,内容丰富有趣,学习的好帮手!
1000字范文 > 并发编程 并行 多线程 锁 同步 异步 多线程 单线程 阻塞io 非阻塞io

并发编程 并行 多线程 锁 同步 异步 多线程 单线程 阻塞io 非阻塞io

时间:2019-02-15 15:09:10

相关推荐

并发编程 并行 多线程 锁 同步 异步 多线程 单线程 阻塞io 非阻塞io

一、

cpu的每一个核在同一时间下,只能执行一个线程,就是单核同一时间只能执行一个线程

而cpu可以不停的切换,这样就导致用户感觉可以执行多个线程,这是并发,而不是并行

并发和并行

你吃饭吃到一半,电话来了,你一直到吃完了以后才去接,这就说明你不支持并发也不支持并行。

你吃饭吃到一半,电话来了,你停了下来接了电话,接完后继续吃饭,这说明你支持并发。

你吃饭吃到一半,电话来了,你一边打电话一边吃饭,这说明你支持并行。

并发的关键是你有处理多个任务的能力,不一定要同时。并行的关键是你有同时处理多个任务的能力。

进程和线程

进程就是一个运行的程序,其中一个进程有单独的资源和内存空间,而线程是在进程中的执行单元,其中一个进程可以

多线程在操作同一个资源的时候,就会出现问题,所以就出现锁的问题,线程安全,线程不安全都是围绕这个话题来讲的,其中mysql的操作也是围绕这个来的

多线程和非阻塞的区别

IO操作其实可以分成两个步骤,请求IO操作和执行IO操作。

一般的IO调用过程是这样的:发起IO操作的请求,执行IO操作,得到IO操作的结果,将结果返回给IO操作请求。

阻塞和非阻塞:侧重点是在响应方的策略

阻塞:就是处理完用户的请求之后进行响应数据

非阻塞:就是在不管有没有处理完数据,都立刻给用户响应,这里是响应,而不是主动通知,这个响应式发送方不断的轮询的

同步和异步:侧重点是在发送方的策略

同步是在发送方发送请求后一直等待响应方的响应,

异步是在发送方发送请求之后不管有没有响应,就不管理,而是等待响应方主动给发送方通知

同步/异步关注的是消息通知的机制,而阻塞/非阻塞关注的是程序(线程)等待消息通知时的状态。

dubbo就是用了nio+rpc协议的的原理

Nginx高并发的原理:使用了多路复用和多进程(单线程)的原理来实现高并发的

4 小明的故事#

对上面所讲的概念再次进行一个场景梳理,上面已经明确说明,同步/异步关注的是消息通知的机制,而阻塞/非阻塞关注的是程序(线程)等待消息通知时的状态。以小明下载文件打个比方,从这两个关注点来再次说明这两组概念,希望能够更好的促进大家的理解。

同步阻塞:小明一直盯着下载进度条,到 100% 的时候就完成。

同步体现在:等待下载完成通知;

阻塞体现在:等待下载完成通知过程中,不能做其他任务处理;

同步非阻塞:小明提交下载任务后就去干别的,每过一段时间就去瞄一眼进度条,看到 100% 就完成。

同步体现在:等待下载完成通知;

非阻塞体现在:等待下载完成通知过程中,去干别的任务了,只是时不时会瞄一眼进度条;【小明必须要在两个任务间切换,关注下载进度】

异步阻塞:小明换了个有下载完成通知功能的软件,下载完成就“叮”一声。不过小明仍然一直等待“叮”的声音(看起来很傻,不是吗)。

异步体现在:下载完成“叮”一声通知;

阻塞体现在:等待下载完成“叮”一声通知过程中,不能做其他任务处理;

异步非阻塞:仍然是那个会“叮”一声的下载软件,小明提交下载任务后就去干别的,听到“叮”的一声就知道完成了。

异步体现在:下载完成“叮”一声通知;

非阻塞体现在:等待下载完成“叮”一声通知过程中,去干别的任务了,只需要接收“叮”声通知即可;【软件处理下载任务,小明处理其他任务,不需关注进度,只需接收软件“叮”声通知,即可】

也就是说,同步/异步是“下载完成消息”通知的方式(机制),而阻塞/非阻塞则是在等待“下载完成消息”通知过程中的状态(能不能干其他任务),在不同的场景下,同步/异步、阻塞/非阻塞的四种组合都有应用。

---------------------

作者:调皮的玩代码

来源:CSDN

原文:/weily11/article/details/80309007

版权声明:本文为博主原创文章,转载请附上博文链接!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。