`
tinkame
  • 浏览: 6081 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

三种开源网络框架比较

阅读更多
mina selector模型:
1.在Mina 2.0中,Selector的管理是由org.apache.mina.transport.socket.nio.NioProcessor来处理,每个NioProcessor对象保存一个Selector,负责具体的select、wakeup、channel的注册和取消、读写事件的注册和判断、实际的IO读写操作等等
2.
SimpleIoProcessorPool默认是cpu+1的  大小;这样一来,每个连接都关联一个NioProcessor,也就是关联一个Selector对象,避免了所有连接共用一个Selector负载过高导致 server响应变慢的后果。

3.但是注意到NioSocketAcceptor也有一个Selector,这个Selector用来干什么的呢?那就是集中处理OP_ACCEPT事件的Selector,主要用于连接的接入,不跟处理读写事件的Selector混在一起,因此Mina的默认open的 Selector是cpu+2个。

4.由此看出,mina2仍然是reactor多线程模型;

netty5.0 selector模型:
1. 每个NioEventLoop拥有一个selector对象;
2. ServerBootstrap b = new ServerBootstrap();
b.group(bossGroup, workerGroup); 服务端启动的时候创建了2个NioEventLoopGroup,他们实际上是2个独立的Reactor线程池;一个用于接收客户端的TCP连接建立和关闭;另一个用于IO相关的读写操作,或者执行系统task,定时任务task;
3.由此可以看出netty是  主从线程池模型;


Grizzly:
Grizzly还是比较保守,它默认就是启动两个Selector,其中一个专门负责accept,另一个负责连接的IO读写事件的管理


1、在处理大量连接的情况下,多个Selector比单个Selector好
2、多个Selector的情况下,处理OP_READ和OP_WRITE的Selector要与处理OP_ACCEPT的Selector分离,也就是说处理接入应该要一个单独的Selector对象来处理,避免IO读写事件影响接入速度。
3、Selector的数目问题,mina默认是cpu+2,而grizzly总共就2个,我更倾向于mina的策略,但是我认为应该对cpu个数做一个判断,如果CPU个数超过8个,那么更多的Selector线程可能带来比较大的线程切换的开销,mina默认的策略并非合适,幸好可以通过API设置这个数值。


4.netty学习
  ChannelFuture f = b.bind(PORT).sync();
1.bind中执行了  获取一个ServerSocketChannel  并将其注册到EventLoop中的Seclector中取;
2.将ServerSocketChannel  绑定到指定的IP和端口
EventLoopGroup bossGroup = new NioEventLoopGroup()发生了以下事情:
      1、 为NioEventLoopGroup创建数量为:处理器个数 x 2的,类型为NioEventLoop的实例。每个NioEventLoop实例 都持有一个线程,以及一个类型为LinkedBlockingQueue的任务队列
      2、线程的执行逻辑由NioEventLoop实现
      3、每个NioEventLoop实例都持有一个selector,并对selector进行优化
doug lea个人网站:
http://gee.cs.oswego.edu/dl/
分享到:
评论

相关推荐

    第三方开源框架

    在IT行业中,第三方开源框架是开发者们不可或缺的工具,它们为快速构建高效、稳定的应用程序提供了强大支持。本文将深入探讨“第三方开源框架”的概念、重要性以及如何使用,以KJFrameForAndroid为例,展示其在解决...

    开源mvc框架源码

    【标题】:“开源MVC框架源码”是指公开的、基于Model-View-Controller架构模式的Web开发框架的源代码。这些框架允许开发者通过分离业务逻辑、数据处理和用户界面来构建应用程序,提高代码的可维护性和可扩展性。 ...

    joone JAVA中的开源神经网络框架

    Joone 是一个基于Java语言的开源神经网络框架,它的出现为开发者提供了一个在Java环境中构建、训练和应用神经网络的工具。Joone 的设计目标是易于使用,同时保持足够的灵活性,以便适应各种复杂的神经网络模型。 ...

    来自英国的开源网络通讯框架 networkcomms2.3.1 (c#源码)

    来自英国的开源网络通讯框架networkcomms2.3.1,以其丰富的功能、强大的性能以及跨平台的特性,为开发者提供了一个高效、易用的解决方案。 networkcomms2.3.1的核心特性在于其对多种平台的支持,包括Windows操作...

    Android非常实用的开源项目框架

    以上仅是部分常见的Android开源项目框架,实际的开源项目示例可能包含以上的一种或多种,或者是针对特定场景的解决方案。通过深入研究这些开源项目,开发者不仅可以提升自己的技术水平,也能了解到最新的开发趋势和...

    NetDF免费开源开发框架

    NetDF免费开源开发框架是一个专为开发者设计的高效、易学且不断演进的软件开发平台。这个框架的核心目标是促进技术交流,鼓励开源社区的爱好者贡献他们的想法和改进方案,从而打造出一个能够帮助广大开发者快速构建...

    网络编程开源框架

    2. **Bayonet开源网络服务器框架**:Bayonet可能是一个基于C++的高性能、可扩展的网络服务器框架。在有限状态机的C++实现(2)-bayonet开源网络服务器框架中,我们可以期待看到Bayonet如何利用状态机来处理网络请求,...

    开源框架实战宝典

    《开源框架实战宝典》是一本为J2EE程序员和架构师量身打造的参考书籍,它围绕构建开源框架的方法论和设计理念、框架创建基础以及常见框架的实战应用,旨在帮助读者提升在J2EE领域内的技术能力和实战经验。...

    Android第三方开源框架ImageLoader的完美Demo

    `ImageLoader`就是这样一个被广泛使用的第三方开源框架,它为开发者提供了强大的图片异步加载和缓存功能。本Demo详细展示了如何在Android项目中集成和使用`ImageLoader`,以实现高效、流畅的图片显示。 `...

    58同城开源框架

    【58同城开源框架】是58同城公司推出的一款开源技术框架,旨在为开发者提供高效、稳定、可扩展的开发工具。这个框架凝聚了58同城在互联网服务领域的技术积累,体现了其对软件工程的最佳实践,有助于提升开发效率,...

    网络上的开源框Halcon+C#

    【网络上的开源框Halcon+C#】是一种将强大的机器视觉算法库Halcon与面向对象的编程语言C#相结合的应用框架。Halcon是德国MVTec公司开发的知名机器视觉软件,提供了丰富的图像处理和模式识别功能,广泛应用于工业自动...

    各种开源框架Android

    "各种开源框架Android"这个主题涵盖了多个方面,包括UI设计、网络请求、图片加载、数据持久化、MVVM架构等。下面将详细讲解这些关键领域的开源框架及其重要性。 首先,UI设计框架如`RecyclerView`、`...

    LTE开源框架

    在当前信息时代,LTE(长期演进)技术作为...总之,通过LTE开源框架LTE-Sim,研究人员可以模拟和评估LTE网络中的各种技术和策略,这对于推动LTE技术的发展、优化网络性能以及制定未来的无线通信策略具有重要的价值。

    基于Unity开源框架GameFramewrk实现的一款塔防游戏Demo源码+项目说明.zip

    【资源说明】 1、该资源包括项目的全部源码,下载可以直接使用! 2、本项目适合作为计算机、数学、电子信息等专业的课程设计、期末大作业和...基于Unity开源框架GameFramewrk实现的一款塔防游戏Demo源码+项目说明.zip

    eBay 开源SOA框架

    `NOTICE` 文件则可能列出框架中使用的第三方库和组件,以及相应的版权和许可信息,遵守开源软件的法律要求。 **webapp和sources目录** `webapp` 目录可能包含了该框架的Web应用程序部分,包括HTML、CSS、...

    .net开源框架

    首先,.NET框架是由微软开发的一种编程模型,用于创建Windows、Web和移动应用。而.NET开源框架则是这个模型的开放源代码版本,它允许开发者不受限制地查看、修改和分发代码,从而促进了社区协作和创新。其中,"why...

    开源nio框架cindy源码

    Cindy是一款基于Java NIO(Non-blocking Input/Output)的开源框架,它的设计目标是提供高效、可扩展的网络通信能力。NIO是一种不同于传统I/O的编程模型,它允许程序在等待数据读写时执行其他任务,从而提高了并发...

    DWR js框架 javascript框架 web与java交互 Direct Web Remoting Ajax开源框架

    综上所述,DWR作为一个强大的JavaScript框架,极大地简化了Web开发者在Java和JavaScript之间的交互,提供了一种高效、安全的方法来实现Ajax功能。通过理解并熟练使用DWR,开发者可以构建出更加动态和用户友好的Web...

    开源安卓框架ThinkAndroidDemo含有源码

    此外,ThinkAndroidDemo可能包含了一些流行的第三方库,如Retrofit用于网络请求,ButterKnife或ViewBinding用于视图绑定,Gson或Jackson用于JSON解析等。这些库的集成展示了如何高效地利用社区资源,提高开发效率,...

Global site tag (gtag.js) - Google Analytics