虹桥街道网站建设,做网站应该学什么语言,织梦网站主页地址更改,自己设计建房子的软件今天开始写一些高并发实战系列。 本系列主要讲两大主流框架#xff1a; Netty和Quasar(java纤程库) 先介绍netty吧#xff0c;netty是业界比较成熟的高性能异步NIO框架。 简单来说#xff0c;它就是对NIO2的封装#xff0c;但提供了更好用#xff0c;bug更少的API。 为什么… 今天开始写一些高并发实战系列。 本系列主要讲两大主流框架 Netty和Quasar(java纤程库) 先介绍netty吧netty是业界比较成熟的高性能异步NIO框架。 简单来说它就是对NIO2的封装但提供了更好用bug更少的API。 为什么netty能提供高性能核心要点有以下两点 1.Netty基于NIO2的事件驱动模式 2.零拷贝 先说事件驱动模式吧这个好理解我们慢慢分解 java原来IO操作都是阻塞的一个IO请求一个线程多个IO请求就要多个线程很消耗资源。 现在NIO不一样了多个IO请求一个线程reactor,这个线程专门用来监听不同事件read,write,accept根据事件类型分发到不同线程去异步处理处理完后拿到结果返回给客户端。原理如下图 举个例子吧比如你去KFC买汉堡 1.如果是阻塞式IO的情景是这样的 你美女给我来个鸡腿堡不要辣。 服务员小姜:好的稍等。 然后服务员小姜就去后台。先炸鸡腿再烤面包再把鸡腿放些沙拉酱合上两处面包再用纸打个包。 最后服务员小姜一路小跑到前台把汉堡放在托盘上。 然后小姜打开电脑跟你结账您好一共19.9谢谢。 2.如果是非阻塞式NIO的情景是这样的 你美女给我来个鸡腿堡不要辣。 服务员小姜:好的稍等。回头一喊老姜给我来个鸡腿堡。 然后服务员老姜就去后台。先炸鸡腿再烤面包再把鸡腿放些沙拉酱合上两处面包再用纸打个包。 最后服务员老姜一路小跑到前台把汉堡交给小姜小姜把汉堡放在托盘上。 然后小姜打开电脑跟你结账您好一共19.9送你一包薯条谢谢。 这两种情景有什么不一样 有同学说前面的情景只有小姜一个人在干活很着挺累人的。而且貌似小姜同一时间只能服务一个客户。 也有同学说后面加上老姜小姜的工作轻松很多也可以同进服务多个客户,效率也提高了不少。 也有同学说后面小姜还送了一包薯条-------好眼力好细心这都被你发现了但这个不是问题的重点年轻人不要分心啊 这两个场景完全说明了一个问题 阻塞式IO效率很低等待时间长吞吐量低;非阻塞式NIO效率高等待时间短后台可以用N个老姜吞吐量高。 从上面的例子我们也可以很容易理解事件驱动模式。 什么叫事件驱动 首先要有事件你要点个鸡腿堡这是个事件。 然后这个事件被小姜“监听”到了这时小姜的身份类似于NIO的selector(监听器)。 小姜一监听到这个事件立马转发给老姜worker线程老姜在后面忙活然后没有说话扔给小姜一个打包好的鸡腿堡。 小姜再转扔给你。 这就叫事件驱动模式。 现在我们再到说说什么是BIONIO,AIO以及它们的区别和应用场景。 Java BIO 同步并阻塞服务器实现模式为一个连接一个线程即客户端有连接请求时服务器端就需要启动一个线程进行处理如果这个连接不做任何事情会造成不必要的线程开销当然可以通过线程池机制改善。 Java NIO 同步非阻塞服务器实现模式为一个请求一个线程即客户端发送的连接请求都会注册到多路复用器上多路复用器轮询到连接有I/O请求时才启动一个线程进行处理。 Java AIO(NIO.2) 异步非阻塞服务器实现模式为一个有效请求一个线程客户端的I/O请求都是由OS先完成了再通知服务器应用去启动线程进行处理 BIO、NIO、AIO适用场景分析: BIO方式适用于连接数目比较小且固定的架构这种方式对服务器资源要求比较高并发局限于应用中JDK1.4以前的唯一选择但程序直观简单易理解。 NIO方式适用于连接数目多且连接比较短轻操作的架构比如聊天服务器并发局限于应用中编程比较复杂JDK1.4开始支持。 AIO方式使用于连接数目多且连接比较长重操作的架构比如相册服务器充分调用OS参与并发操作编程比较复杂JDK7开始支持。 另外I/O属于底层操作需要操作系统支持并发也需要操作系统的支持所以性能方面不同操作系统差异会比较明显。 在高性能的I/O设计中有两个比较著名的模式Reactor和Proactor模式其中Reactor模式用于同步I/O而Proactor运用于异步I/O操作。 好了今天的内容就这些明天继续讲零拷贝。 对了点汉堡时别忘了跟服务员多要包薯条毕竟这是免费的 转载于:https://www.cnblogs.com/gyc567/p/11038669.html