lecture4非阻塞通信

lecture4非阻塞通信

ID:46945613

大小:269.00 KB

页数:91页

时间:2019-11-30

lecture4非阻塞通信_第1页
lecture4非阻塞通信_第2页
lecture4非阻塞通信_第3页
lecture4非阻塞通信_第4页
lecture4非阻塞通信_第5页
资源描述:

《lecture4非阻塞通信》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、第四章 非阻塞通信主要内容线程阻塞的概念Java.nio包中类的介绍:ServerSocketChannelSocketChannelSelector/SelectionKey/ByteBuffer等阻塞模式与非阻塞模式的实现4.1线程阻塞的概念处于阻塞状态的线程共同特征:1、放弃CPU,暂停运行,只有等待导致阻塞的原因消除,才能恢复运行;2、或者被其他线程中断,该线程会退出阻塞状态,并且抛出InterruptedException4.1线程阻塞的原因1、线程执行Thread.sleep(intn);2、线程要执行一段同步代码3、线程执行了一个对象的wait()方法,只有其

2、他线程执行了该对象的notify()或notifyAll()方法,才能将其唤醒4、线程执行I/O操作,如ReadLine之类的方法。客户程序线程进入阻塞状态的情况1、客户程序与服务器建立连接时,会进入阻塞状态,直到连接成功,线程才返回2、线程从Socket的输入流读入数据时,如果没有足够的数据,就进入阻塞状态,直到读到足够数据,或到达输入流末尾,或者异常,才会返回。输入流的不同读方法:intread():输入一个字节就足够intread(byte[]buff):输入流字节数和数组长度相同StringreadLine():输入流中有一行字符串就足够,需要BufferReade

3、r的此方法。客户程序线程进入阻塞状态的情况3、线程从Socket的输出流写数据时,可能进入阻塞状态,等待输出了所有数据或者出现异常,才从输出流的write()方法返回或者异常中断4、调用Socket的close()方法时如果设置了关闭Socket的延迟时间,会进入阻塞,直到底层Socket发完所有数据,或者超过setSoLinger()方法设置的延迟时间,才从close()方法返回。服务器程线程进入阻塞状态的情况1、线程执行ServerSocket的accept()方法2、线程从Socket的输入流读入数据,同客户端3、线程从Socket的输出流写出数据,同客户端综上,通过

4、Socket的输入输出流来读写数据时,都可能进入阻塞状态。这种可能出现阻塞的输入输出操作称为阻塞I/O与此对照,如果这种输入输出流读写操作不发生阻塞,则称为非阻塞I/O4.1.2服务器多线程处理阻塞通信局限创建ServerSocket接收连接accept委派任务给工作线程等待任务接收请求数据发送响应数据关闭连接通信结束?否主线程工作线程红色标志步骤为可能阻塞,一旦阻塞,需要转让线程CPU使用权4.1.2服务器多线程处理阻塞通信局限工作线程的数目并发性能局限:每个线程分配独立的堆栈空间,线程调度、同步、死锁可能很多时间浪费在阻塞IO操作上,线程切换频繁非阻塞通信的基本思想一心

5、多用轮询—while处理流程While(一直等待,直到有接收连接就绪事件、读就绪事件、写就绪事件发生){//阻塞If(有客户连接)接收客户连接;//非阻塞If(Socket输入流有可读数据)从输入流中读数据;//非阻塞If(Socket输出流可写数据)向输出流中写数据;//非阻塞Java.nio包中的主要类以下支持阻塞和非阻塞通信的类ServerSocketChannel:ServerSocket的替代类,支持阻塞与非阻塞通信SocketChannel:Socket的替代类,同上Selector:为ServerSocketChannel监控接收连接就绪事件,为SocketC

6、hannel监控连接就绪、读就绪、写就绪事件。Java.nio包中的主要类SelectionKey:代表ServerSocketChannel和SocketChannel向Selector注册事件的句柄,当一个SelectionKey对象位于Selector对象的selected-keys集合中时,就表示与这个SelectionKey对象相关的事件发生了。Java.nio包中的主要类如何注册事件的呢?ServerSocketChannel向Selector注册接收连接就绪事件的代码如下:注册事件过程SelectionKeykey=serverSocketChannel.re

7、gister(selector,SelectionKey.OP_ACCEPT);Java.nio包中的主要类《interface》Channel《interface》ByteChannelSelectableChannelServerSocketChannelSocketChannelServerSocketChannel和SocketChannel都是SelectableChannel的子类,SelectableChannel及其子类都能委托Selector来监控它们可能发生的一些事件,这个委托过程也称为注册事件

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。