同步异步阻塞非阻塞的区别?

同步:

所谓同步,就是发出一个功能调用是,在没有得到结果之前,该调用就不返回或继续执行后续操作。
简单来说,同步就是必须一件一件事做,等前一件做完了才能做下一件事。
例如:B/S模式中的表单提交,具体过程是:客户端提交请求------》等待服务器处理-------》处理完毕返回,在这个过程中客户端(浏览器)不能做其他事。

异步:

异步与同步相对,当一个异步过程调用发出后,调用者在没有得到结果之前,就可以继续执行后续操作。当这个调用完成后,一般通过状态、通知和回调老通知调用者。对于异步调用,调用的返回并不受调用者控制。
对于通知调用者的三种方式,具体如下:
状态
即监听被调用者的状态(轮询),调用者需要每隔一定时间检查一次,效率会很低。
通知
当被调用者执行完成后,发出通知告知调用者,无需消耗太多性能。
回调
与通知类似,当被调用者执行完成后,会调用调用者提供的回调函数。
例如:B/S模式中的ajax请求,具体过程是:客户端发出ajax请求------》服务端处理------》处理完毕执行客户端回调,在客户端(浏览器)发出请求后,仍然可以做其他的事。

同步和异步的区别:

总结来说,同步和异步的区别:请求发出后,是否需要等待结果,才能继续执行其他操作。

阻塞和非阻塞

阻塞和非阻塞这两个概念与程序(线程)等待消息通知(无所谓同步或者异步)时的状态有关。也就是说阻塞和非阻塞主要是程序(线程)等待消息通知时的状态角度来说的。
阻塞和非阻塞关注的是程序在等待调用结果(消息,返回值)时的状态
阻塞调用是指调用结果返回之前,当前线程会被挂起。调用线程只有在得到结果之后才会返回。
非阻塞调用指在不能立刻得到结果之前,该调用不会阻塞当前线程。

例子1:同步

    老板布置了一个调研任务,老板自己需要写一个调研报告。这个调研的一个子任务由同学A完成,老板最终需要将同学A的任务整合到自己的调研报告中。因为老板的调研报告需要用到同学A的调研结果,那么老板的调研报告就必须等到同学A调研完成以后才能完成。那么在整个调研的过程中,最终的调研报告和同学A的调研任务之间就是同步关系,因为两个任务之间有着时序(先后)的关系。

例子2:异步

    老板又布置了一个调研任务,但是这个调研任务是可行性调研,不需要写报告,只需要知道可不可行就可。这个任务由一个同学B来调研;同学B调研完成之后,直接将结果反馈给老板即可。那么在这个调研过程中,老板去打乒乓球了,而同学B在做调研工作。在此过程中,老板做的事情和同学B做的事情之间就是异步关系,因为老板做的事情和同学B做的事情没有关系,并行完成。

例子3:阻塞

    延续例子1种的事情,假如需要A同学完成的事情很简单,那么老板就可能会选择,站在A旁边等到A调研结束,再进行剩余的工作(把A的调研结果写到自己的调研报告中)。那么此时老板就处于阻塞状态

例子4:非阻塞

    同样是例子1,如果同学A要做的事情很浪费时间,需要几天才能完成,这是老板自然不会傻X的站在旁边等着。这个时候,老板可能就会去打乒乓球,但是由于报告还是要完成的,老板也许隔段时间就会问,好了没有啊,你好了没有啊之类的。等到同学A调研完成以后,继续进行调研报告的撰写工作。这个过程中呢,老板就处于非阻塞状态,因为他在做其他的事情,并没有一直在等待同学A。

第二个例子:

老张爱喝茶,废话不说,煮开水。

出场人物:老张,水壶两把(普通水壶,简称水壶;会响的水壶,简称响水壶)。

1 老张把水壶放到火上,立等水开。(同步阻塞)

老张觉得自己有点傻

2 老张把水壶放到火上,去客厅看电视,时不时去厨房看看水开没有。(同步非阻塞)

老张还是觉得自己有点傻,于是变高端了,买了把会响笛的那种水壶。水开之后,能大声发出嘀~~~~的噪音。

3 老张把响水壶放到火上,立等水开。(异步阻塞)

老张觉得这样傻等意义不大

4 老张把响水壶放到火上,去客厅看电视,水壶响之前不再去看它了,响了再去拿壶。(异步非阻塞)

老张觉得自己聪明了。

所谓同步异步,只是对于水壶而言。

普通水壶,同步;响水壶,异步。

虽然都能干活,但响水壶可以在自己完工之后,提示老张水开了。这是普通水壶所不能及的。

同步只能让调用者去轮询自己(情况2中),造成老张效率的低下。

所谓阻塞非阻塞,仅仅对于老张而言。

立等的老张,阻塞;看电视的老张,非阻塞。

情况1和情况3中老张就是阻塞的,媳妇喊他都不知道。虽然3中响水壶是异步的,可对于立等的老张没有太大的意义。所以一般异步是配合非阻塞使用的,这样才能发挥异步的效用。

并发并行

并发: 是指同一时间间隔内做多件事情,在操作系统中。
是指一个时间段中有几个程序都处于已启动运行到运行完毕之间,且这几个程序都是在同一个处理机上运行,但任一个时刻点上只有一个程序在处理机上运行。
并行: 是指同一时刻同时做多件事情
在操作系统中,一组程序按独立异步的速度执行,无论从微观还是宏观,程序都是一起执行的。

并发和并行
并发是两个队列交替使用一台咖啡机,并行是两个队列同时使用两台咖啡机,如果串行,一个队列
来个比喻:并发和并行的区别就是一个人同时吃三个馒头和三个人同时吃三个馒头
并发和并行

在单CPU系统中,系统调度在某一时刻只能让一个线程运行,虽然这种调试机制有多种形式(大多数是时间片轮询为主),但无论如何,要通过不断切换需要运行的线程让其运行的方式就叫并发(concurrent)。而在多CPU系统中,可以让两个以上的线程同时运行,这种可以同时让两个以上线程同时运行的方式叫做并行(parallel).

并发通常指提高运行在单处理器上的程序的性能;
并发是有状态的,“具有可论证的确定性,但是实际上具有不可确定性”;
"并发"在微观上不是同时执行的,只是把时间分成若干段,使多个进程快速交替的执行,从宏观外来看,好像是这些进程都在执行。
使用多个线程可以帮助我们在单个处理系统中实现更高的吞吐量,如果一个程序是单线程的,这个处理器在等待一个同步I/O操作完成的时候,他仍然是空闲的。在多线程系统中,当一个线程等待I/O的同时,其他的线程也可以执行。

资源请求并发数达到了1万。这里的意思是有1万个请求同时过来了。但是这里很明显不可能真正的同时去处理这1万个请求的吧!如果这台机器的处理器有4个核心,不考虑超线程,那么我们认为同时会有4个线程在跑。也就是说,并发访问数是1万,而底层真实的并行处理的请求数是4。如果并发数小一些只有4的话,又或者你的机器牛逼有1万个核心,那并发在这里和并行一个效果。也就是说,并发可以是虚拟的同时执行,也可以是真的同时执行。而并行的意思是真的同时执行。结论是:并行是我们物理时空观下的同时执行,而并发则是操作系统用线程这个模型抽象之后站在线程的视角上看到的“同时”执行

异步和多线程区别?

  • 异步和多线程有什么区别?

    其实,异步是目的,而多线程是实现这个目的的方法。异步是说,A发起一个操作后(一般都是比较耗时的操作,如果不耗时的操作就没有必要异步了),可以继续自顾自的处理它自己的事儿,不用干等着这个耗时操作返回。

猜你喜欢

转载自blog.csdn.net/qq_32963927/article/details/89379918
今日推荐