欢迎来到天天文库
浏览记录
ID:30768848
大小:75.00 KB
页数:8页
时间:2019-01-03
《javanio:浅析i-o模型-java开发java经验技巧》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、JavaNIO:浅析I/O模型-编程开发技术JavaNIO:浅析I/O模型原文出处:海了也许很多朋友在学习NTO的时候都会感觉冇点吃力,对里面的很多概念都感觉不是那么明圳。在进入J3V3NI0编程Znij,我们今天先來讨论一些比较基础的知识:1/0模型。下而本文先从同步和异步的概念说起,然后接着阐述了阻塞和非阻塞的区别,接着介绍了阻塞10和非阻塞10的区别,然后介绍了同步10和异步10的区别,接下来介绍了5种10模型,最后介绍了两种和高性能10设计相关的设计模式(Reactor和Proactor)。以下是本文的目录大纲:一•什么是同步?什么是异步?二•什么是阻塞?什
2、么是非阻塞?三•什么是阻塞T0?什么是非阻塞T0?四•什么是同步T0?什么是异步T0?五•五种10模型六.两种高性能10设计模式若有不正之处,请多多谅解并欢迎批评指正。请尊重作者劳动成果,转载请标明原文链接:http://www.cnblogs.com/dolphin0520/p/3916526.html一•什么是同步?什么是异步?同步和异步的概念出来已经很久了,网上冇关同步和异步的说法也冇很多。以下是我个人的理解:同步就是:如果有多个任务或者事件要发生,这些任务或者事件必须逐个地进行,一个事件或者任务的执行会导致整个流程的暂时等待,这些事件没有办法并发地执行;异步
3、就是:如果有多个任务或者事件发生,这些事件可以并发地执行,一个事件或者任务的执行不会导致整个流程的暂时等待。这就是同步和异步。举个简单的例子,假如冇一个任务包括两个子任务A和B,对于同步来说,当A在执行的过程中,B只有等待,直至A执行完毕,B才能执行;而对于异步就是A和B可以并发地执行,B不必等待A执行完毕之后再执行,这样就不会由于A的执行导致整个任务的暂时等待。如果述不理解,可以先看下而这2段代码:voidfunl(){voidfun2()voidfunction(){fun1();fun2()}这段代码就是典型的同步,在方法function中,funl在执行的过
4、程中会导致后续的fun2无法执行,fun2必须等待funl执行完毕才可以执行。接着看下面这段代码:voidfunl(){)voidfun2(){Ivoidfunction(){newThread(){publicvoidrun(){funl();}}・start();newThread(){publicvoidrun(){fun2();}.start();这段代码是一种典型的异步,funl的执行不会影响到fun2的执行,并且funl和fun2的执行不会导致其后续的执行过程处于暂时的等待。事实上,同步和异步是一个非常广的概念,它们的重点在于多个任务和事件发生时,一个事
5、件的发生或执行是否会导致整个流程的暂吋等待。我觉得可以将同步和异步与Java中的synchronized关键字联系起來进行类比。当多个线程同时访问一个变量时,每个线程访问该变量就是一个事件,对于同步来说,就是这些线程必须逐个地来访问该变量,一个线程在访问该变量的过程中,其他线程必须等待;而对于异步来说,就是多个线程不必逐个地访问该变量,可以同吋进行访问。因此,个人觉得同步和异步可以表现在很多方面,但是记住其关键在于多个任务和事件发生时,一个事件的发生或执行是否会导致整个流程的暂时等待。一般来说,可以通过多线程的方式来实现异步,但是千万记住不耍将多线程和异步I田i上等
6、号,异步只是宏观上的一个模式,采用多线程来实现异步只是一种手段,并口通过多进程的方式也可以实现异步。二•什么是阻塞?什么是非阻塞?在前面介绍了同步和异步的区别,这一节來看一卜•阻塞和非阻塞的区别。阻塞就是:当某个事件或者任务在执行过程中,它发岀一个请求操作,但是由于该请求操作需要的条件不满足,那么就会一直在那等待,直至条件满足;非阻塞就是:当某个事件或者任务在执行过程中,它发出一个请求操作,如果该请求操作需要的条件不满足,会立即返冋一个标志信息告知条件不满足,不会一直在那等待。这就是阻塞和非阻塞的区别。也就是说阻塞和非阻塞的区别关键在于当发出请求一个操作时,如果条件
7、不满足,是会一直等待还是返冋一个标志信息。举个简单的例子:假如我要读取一个文件中的内容,如果此时文件中没有内容可读,对于同步来说就是会一直在那等待,直至文件中有内容可读;而对于非阻塞来说,就会直接返回一个标志信息告知文件中暂时无内容可读。在网上冇一些朋友将同步和异步分别与阻塞和非阻塞慚上等号,事实上,它们是两组完全不同的概念。注意,理解这两组概念的区别对于后面10模型的理解非常重要。同步和异步着重点在于多个任务的执行过程中,一个任务的执行是否会导致整个流程的暂时等待;而阻塞和非阻塞着重点在于发出一个请求操作时,如杲进行操作的条件不满足是否会返会一个标志信息告知条
此文档下载收益归作者所有