非阻塞Socket通信ppt课件.ppt

非阻塞Socket通信ppt课件.ppt

ID:58648631

大小:319.50 KB

页数:95页

时间:2020-10-05

非阻塞Socket通信ppt课件.ppt_第1页
非阻塞Socket通信ppt课件.ppt_第2页
非阻塞Socket通信ppt课件.ppt_第3页
非阻塞Socket通信ppt课件.ppt_第4页
非阻塞Socket通信ppt课件.ppt_第5页
资源描述:

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

1、第7章非阻塞Socket通信7.1阻塞和非阻塞通信7.2非阻塞通信中的几个类7.3使用JavaN10提高服务端程序的性能7.4使用NIO编写高性能的服务器7.5非阻塞编程实例 本章小结NetworkProgrammingSoftwareEngineering第7章非阻塞Socket通信前面介绍的网络通信程序是基于阻塞式API的——即当程序执行输入、输出操作后,在这些操作返回之前会一直阻塞该线程,所以服务器必须为每个客户端都提供一条独立线程进行处理,当服务器需要同时处理大量客户端时,这种做法会导致性能下降。使用NIOAPI则可以让服务器使用一个或

2、有限几个线程来同时处理连接到服务器上的所有客户端。NetworkProgrammingSoftwareEngineering7.1阻塞和非阻塞通信一、线程阻塞在生活中,最常见的阻塞现象是公路上汽车的堵塞。汽车在公路上快速运行,如果前方交通受阻,就只好停下来等待,等到公路顺畅,才能恢复运行。线程在运行中也会因为某些原因而阻塞。所有处于阻塞状态的线程的共同特征是:放弃CPU,暂停运行,只有等到导致阻塞的原因消除,才能恢复运行;或者被其他线程中断,该线程会退出阻塞状态,并且抛出InterruptedException。NetworkProgrammi

3、ngSoftwareEngineering7.1阻塞和非阻塞通信1.线程阻塞的原因(1)线程执行了阻塞线程的方法:线程执行了Thread.sleep(intn)方法,线程放弃CPU,睡眠n毫秒,然后恢复运行。线程要执行一段同步代码,由于无法获得相关的同步锁,只好进入阻塞状态,等到获得了同步锁,才能恢复运行。线程执行了一个对象的wait()方法,进入阻塞状态,只有等到其他线程执行了该对象的notify()或notifyAll()方法,才可能将其唤醒。NetworkProgrammingSoftwareEngineering7.1阻塞和非阻塞通信(

4、2)当通过Socket的输入流和输出流来读写数据时,都可能进入阻塞状态。这种可能出现阻塞的输入和输出操作被称为阻塞I/O。(3)在服务器程序中,线程执行ServerSocket的accept()方法,等待客户的连接,直到接收到了客户连接,才从accept()方法返回。NetworkProgrammingSoftwareEngineering7.1阻塞和非阻塞通信2.服务器程序用多线程处理阻塞通信的局限下图显示了服务器程序用多线程来同时处理多个客户连接的工作流程。主线程负责接收客户的连接。在线程池中有若干工作线程,它们负责处理具体的客户连接。每当

5、主线程接收到一个客户连接,主线程就会把与这个客户交互的任务交一个空闲的工作线程去完成,主线程继续负责接收下一个客户连接。NetworkProgrammingSoftwareEngineering7.1阻塞和非阻塞通信NetworkProgrammingSoftwareEngineering7.1阻塞和非阻塞通信服务器程序用多线程来处理阻塞I/O,尽管能满足同时响应多个客户请求的需求,但是有以下局限:(1)Java虚拟机会为每个线程分配独立的堆栈空间,工作线程数目越多,系统开销就越大,而且增加了Java虚拟机调度线程的负担,增加了线程之间同步的复

6、杂性,提高了线程死锁的可能性。(2)工作线程的许多时间都浪费在阻塞I/O操作上,Java虚拟机需要频繁地转让CPU的使用权,使进入阻塞状态的线程放弃CPU,再把CPU分配给处于可运行状态的线程。由此可见,工作线程并不是越多越好。NetworkProgrammingSoftwareEngineering7.1阻塞和非阻塞通信二、非阻塞非阻塞通信的基本思想假如同时要做两件事:烧开水和烧粥。烧开水的步骤如下:锅里放水,打开煤气炉;等待水烧开;//阻塞关闭煤气炉,把开水灌到水壶里;烧烧粥的步骤如下:锅里放水和米,打开煤气炉;等待粥烧开;//阻塞调整煤气

7、炉,改为小火;等待粥烧熟;//阻塞关闭煤气炉;NetworkProgrammingSoftwareEngineering7.1阻塞和非阻塞通信为了同时完成两件事,一种方案是同时请两个人分别做其中的一件事,这相当于采用多线程来同时完成多个任务。还有一种方案是让一个人同时完成两件事,这个人应该善于利用一件事的空闲时间去做另一件事,这个人一刻也不应该闲着:NetworkProgrammingSoftwareEngineering7.1阻塞和非阻塞通信锅里放水,打开煤气炉;//开始烧开水锅里放水和米,打开煤气炉;//开始烧粥while(一直等待,直到有

8、水烧开、粥烧开或粥烧熟事件发生){//阻塞if(水烧开)关闭煤气炉,把开水灌到水壶里;if(粥烧开)调整煤气炉,改为小火;if(粥烧熟)关闭煤气炉;}

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

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

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