阻塞与非阻塞和同步与异步以及它们之间的联系

阻塞与非阻塞:线程访问资源,该资源是否准备就绪的一种方式。如果说这个资源没有准备就绪,就会有的两种处理方式。

            阻塞:线程会持续等待这个资源处理完毕,直到它响应返回一个结果,这个线程不可以去做其他事情。

                                                                    图:

                                                                                  

            非阻塞: 这个线程直接返回一个结果,它不会持续等待这个资源处理完毕在响应,它会去处理别的资源。   

                                                                      图:

                                                                          

                                                                       

同步与异步:它是指访问数据的一种机制。

            同步:指主动请求,并且等待我们的IO操作完成之后,它会有一个通知。

                                                                     图:

                                                                           

            异步:指在我们主动请求数据之后呢,继承去处理其他的任务,它可以去发起其他的请求,当我们有很多请求处理完毕之                         后,它在逐一通过一种异步的通知的方式来通知你。

                                                                     图:

                                                                           

那么他们两两组合就可以出现:

                       BIO:同步阻塞的IO,又称Block IO,是一种非常传统,非常简单的模式,这个线程无法去做其他的操作,但是它                                   并发处理的能力会非常的低。

                                                                                               图:
                                                                           如图所示,如果在客户端的数量非常多时候,那么我们Server与Client之间,就会频繁的创建或频繁的销毁之间

                         的线程  ,那么我们的Server服务器就会有很大的压力,甚至会导致我们的服务器崩溃,所以说这种方式是非常                             来老的一种IO流的处理方式。

                      NIO:同步非租塞IO,New IO(Non-Block IO)

                                                                                              图:

                                                 如图,在Client与Server端进行一个通信的时候,我们会使用到一个叫Selector的,可以认为它是一个选择器,它其实就是一个线程,它这个线程会主动的轮询,如果说我们的客户端和服务端要建立连接的时候,它就会进行一个注册,注册完成之后,我们就会有一个叫Channel的东西生成,那么每一个客户端和我们的Selector建立连接之后,都会有一个Channel生成,那么Channel它是一个通道,它是一个双向通道,它可以进行一些相应的数据的读写,那么这些数据的读写,都会到我们缓存区里面去,Channel是非阻塞的读取,Selector是一个单线程,它可以处理成千上万个客户端,客户端的增多,不会影响它的性能,也就是说Channel相当于一个读写的工具,每一个客户端都可以理解为一个单独的Channel, 或者说,每一个客户端和我们服务端建立连接之后,注册完毕之后,就会有一个单独的Channel,它是一个一对一的,每一个Client就会有一个单独的Channel与之对应,然后每一个服务端会有一个Selector,  缓存区里面的数据会用于读写,数据被用于读完之后,这个数据还会存在缓存区内的,它不会因为我们的数据被读取了会后就消失。

                                        AIO:  异步非阻塞

          最后简单的用生活实例总结下它们:

                                               图:

      

                  

 

 

 

 

 

 

 

 

 

 

 

 

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值