﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-少年阿宾-随笔分类-Java NIO</title><link>http://www.blogjava.net/stevenjohn/category/52364.html</link><description>那些青春的岁月</description><language>zh-cn</language><lastBuildDate>Fri, 23 Jan 2015 20:07:12 GMT</lastBuildDate><pubDate>Fri, 23 Jan 2015 20:07:12 GMT</pubDate><ttl>60</ttl><item><title>tomcat7.0.27的bio,nio.apr高级运行模式 </title><link>http://www.blogjava.net/stevenjohn/archive/2015/01/23/422385.html</link><dc:creator>abin</dc:creator><author>abin</author><pubDate>Fri, 23 Jan 2015 04:09:00 GMT</pubDate><guid>http://www.blogjava.net/stevenjohn/archive/2015/01/23/422385.html</guid><wfw:comment>http://www.blogjava.net/stevenjohn/comments/422385.html</wfw:comment><comments>http://www.blogjava.net/stevenjohn/archive/2015/01/23/422385.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/stevenjohn/comments/commentRss/422385.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/stevenjohn/services/trackbacks/422385.html</trackback:ping><description><![CDATA[<div id="blog_content"><strong>一 前言</strong> <br />&nbsp;&nbsp;&nbsp; tomcat的运行模式有3种.修改他们的运行模式.3种模式的运行是否成功,可以看他的启动控制台,或者启动日志.或者登录他们的默认页面http://localhost:8080/查看其中的服务器状态。 <br /><br /><strong>二 bio</strong> <br />默认的模式 blocking IO,性能非常低下,没有经过任何优化处理和支持. <br /><br /><strong>三 nio</strong> <br />利用java的异步io护理技术,no blocking IO技术. <br />想运行在该模式下，直接修改server.xml里的Connector节点,修改protocol为 <br />&lt;Connector port="80" protocol="org.apache.coyote.http11.Http11NioProtocol"  <br />	connectionTimeout="20000"  <br />	URIEncoding="UTF-8" <br />	useBodyEncodingForURI="true" <br />	enableLookups="false"  <br />	redirectPort="8443" /&gt; <br />启动后,就可以生效。性能得到初步优化但与apr相比,还是有一些差距。 <br /><br /><strong>四 apr</strong> <br />安装起来最困难,但是从操作系统级别来解决异步的IO问题,大幅度的提高性能. <br />必须要安装apr和native，直接启动就支持apr。 <br />下面的修改纯属多余，仅供大家扩充知识,但仍然需要安装apr和native <br />如nio修改模式,修改protocol为org.apache.coyote.http11.Http11AprProtocol <br /><br /><strong>五 补充</strong> <br />1)安装APR的方法,请看我另一篇博客http://phl.iteye.com/blog/910984; <br />2)关于性能数据请读者们自行研究,笔者不是在写教科书在此只是给出思路,性能研究是个很深的领域,请各位按需自行搭建环境测试; <br />3)总的来说,bio是不推荐使用的,apr的模式推荐; <br /><br /><table><tbody><tr><td>item </td><td> protocol </td><td> Requests per second</td></tr><tr><td>BIO </td><td> org.apache.coyote.http11.Http11Protocol </td><td> 916.06 [#/sec] (mean)</td></tr><tr><td>NIO </td><td> org.apache.coyote.http11.Http11NioProtocol </td><td> 2102.26 [#/sec] (mean)</td></tr><tr><td>APR </td><td> org.apache.coyote.http11.Http11AprProtocol </td><td> 1997.24 [#/sec] (mean)</td></tr></tbody></table><br /><br /><br /><br /><div>http://phl.iteye.com/blog/910996</div></div><img src ="http://www.blogjava.net/stevenjohn/aggbug/422385.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/stevenjohn/" target="_blank">abin</a> 2015-01-23 12:09 <a href="http://www.blogjava.net/stevenjohn/archive/2015/01/23/422385.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Java BIO、NIO、AIO 学习 </title><link>http://www.blogjava.net/stevenjohn/archive/2015/01/23/422384.html</link><dc:creator>abin</dc:creator><author>abin</author><pubDate>Fri, 23 Jan 2015 04:08:00 GMT</pubDate><guid>http://www.blogjava.net/stevenjohn/archive/2015/01/23/422384.html</guid><wfw:comment>http://www.blogjava.net/stevenjohn/comments/422384.html</wfw:comment><comments>http://www.blogjava.net/stevenjohn/archive/2015/01/23/422384.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/stevenjohn/comments/commentRss/422384.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/stevenjohn/services/trackbacks/422384.html</trackback:ping><description><![CDATA[<p><br /></p><p><strong>先来个例子理解一下概念，以银行取款为例：</strong></p><ul><li><p>同步 ： 自己亲自出马持银行卡到银行取钱（使用同步IO时，Java自己处理IO读写）。</p></li><li><p>异步 ： 委托一小弟拿银行卡到银行取钱，然后给你（使用异步IO时，Java将IO读写委托给OS处理，需要将数据缓冲区地址和大小传给OS(银行卡和密码)，OS需要支持异步IO操作API）。</p></li><li><p>阻塞 ： ATM排队取款，你只能等待（使用阻塞IO时，Java调用会一直阻塞到读写完成才返回）。</p></li><li><p>非阻塞 ： 柜台取款，取个号，然后坐在椅子上做其它事，等号广播会通知你办理，没到号你就不能去，你可以不断问大堂经理排到了没有，大堂经理如果说还没到你就不能去（使用非阻塞IO时，如果不能读写Java调用会马上返回，当IO事件分发器会通知可读写时再继续进行读写，不断循环直到读写完成）。</p></li></ul><p><br /></p><p><strong>Java对BIO、NIO、AIO的支持</strong>：</p><ul><li><p>Java BIO ： 同步并阻塞，服务器实现模式为一个连接一个线程，即客户端有连接请求时服务器端就需要启动一个线程进行处理，如果这个连接不做任何事情会造成不必要的线程开销，当然可以通过线程池机制改善。</p></li><li><p>Java NIO ： 同步非阻塞，服务器实现模式为一个请求一个线程，即客户端发送的连接请求都会注册到多路复用器上，多路复用器轮询到连接有I/O请求时才启动一个线程进行处理。</p></li><li><p>Java AIO(NIO.2) ： 异步非阻塞，服务器实现模式为一个有效请求一个线程，客户端的I/O请求都是由OS先完成了再通知服务器应用去启动线程进行处理，</p></li></ul><p><br /></p><p><strong>BIO、NIO、AIO适用场景分析:</strong></p><ul><li><p>BIO方式适用于连接数目比较小且固定的架构，这种方式对服务器资源要求比较高，并发局限于应用中，JDK1.4以前的唯一选择，但程序直观简单易理解。</p></li><li><p>NIO方式适用于连接数目多且连接比较短（轻操作）的架构，比如聊天服务器，并发局限于应用中，编程比较复杂，JDK1.4开始支持。</p></li><li><p>AIO方式使用于连接数目多且连接比较长（重操作）的架构，比如相册服务器，充分调用OS参与并发操作，编程比较复杂，JDK7开始支持。</p></li></ul><p><br /></p><p><strong>另外</strong>，I/O属于底层操作，需要操作系统支持，并发也需要操作系统的支持，所以性能方面不同操作系统差异会比较明显。</p><p><br /></p><p>本文出自 &#8220;<a href="http://stevex.blog.51cto.com/">力量来源于赤诚的爱！</a>&#8221; 博客，请务必保留此出处<a href="http://stevex.blog.51cto.com/4300375/1284437">http://stevex.blog.51cto.com/4300375/1284437</a></p><img src ="http://www.blogjava.net/stevenjohn/aggbug/422384.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/stevenjohn/" target="_blank">abin</a> 2015-01-23 12:08 <a href="http://www.blogjava.net/stevenjohn/archive/2015/01/23/422384.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>