最近的工作(mina vs. yanf4j)
vs 工作 最近 MINA
2023-09-11 14:16:06 时间
最近工作上是在处理一个线程安全的问题,如何保证对某个资源的访问是独占的,不会有并发的隐患。在此过程中接了checkthread,一个线程安全的静态分析工具,通过annotation标记在编译期检查可能的并发隐患,提供了一个eclipse插件,有兴趣可以看看他的 example。这个东西有个最不好的地方就是要依赖他的自定义annotation,如果不介意的话还是不错的选择,一些常见的隐患都能够标示出来。
另外就是去了解了下netty3,jboss的子项目,netty2和mina作者的另一个作品,关注它是因为在他的benchmark中,netty3的表现很优秀,可以看这篇报告《Performance comparision between java nio framework》。大概看了下他的设计思路,其实与mina并无多大区别,不过使用了一些有意思的trick,例如对于write的处理,一般的nio框架都是放入一个队列,然后注册写事件(队列为空的时候),等待写,写通常也是单线程去写。而netty3做了一个优化,发送消息时同样有一个队列,在放入队列后判断当前是否正在写循环中,如果正在写,那么就注册一个WriteTask唤醒selector等待写;如果没有,那么发送线程立即就去执行这个写操作,这里的一个好处是少了两个开销:注册事件等待触发以及线程切换。Selector.wakeup的操作是比较昂贵的,netty3也做了优化。更多东西等待探索。
山寨nio框架yanf4j已经挺久没有做出任何改进,这次索性将很多过去考虑不成熟、实践中证明不必要的代码删除和简化,然后做了个与mina 2.0 -M5的性能对比,采用的netty3作者的benchmark源码,yanf4j的Echo Server如下:
![](http://www.blogjava.net/Images/OutliningIndicators/ContractedBlock.gif)
Echo Server
import java.nio.ByteBuffer;
import org.jboss.netty.benchmark.echo.Constant;
import com.google.code.yanf4j.config.Configuration;
import com.google.code.yanf4j.nio.Session;
import com.google.code.yanf4j.nio.TCPController;
import com.google.code.yanf4j.nio.impl.HandlerAdapter;
public class Yanf4j {
public static void main(String[] args) throws Exception {
boolean threadPoolDisabled = args.length 0
args[0].equals("nothreadpool");
Configuration configuration = new Configuration();
configuration.setCheckSessionTimeoutInterval(0);
configuration.setSessionIdleTimeout(0);
configuration.setTcpNoDelay(true);
configuration.setReadThreadCount(Runtime.getRuntime()
.availableProcessors());
configuration.setPort(Constant.PORT);
configuration
.setSessionReadBufferSize(Constant.INITIAL_READ_BUFFER_SIZE);
TCPController controller = new TCPController(configuration);
controller.setHandler(new EchoHandler());
if (!threadPoolDisabled) {
controller
.setDispatchMessageThreadPoolSize(Constant.THREAD_POOL_SIZE);
}
controller.start();
System.out.println("Yanf4j EchoServer is ready to serve at port "
+ Constant.PORT + ".");
System.out
.println("Enter ant benchmark on the client side to begin.");
System.out.println("Thread pool: "
+ (threadPoolDisabled ? "DISABLED" : "ENABLED"));
}
static class EchoHandler extends HandlerAdapter {
@Override
public void onReceive(final Session session, final Object msg) {
session.send(((ByteBuffer) msg).duplicate());
}
@Override
public void onException(Session session, Throwable t) {
session.close();
}
}
}
为什么Netty这么火?与Mina相比有什么优势? Netty是什么?为什么这么火? Netty是目前最流行的由JBOSS提供的一个Java开源框架NIO框架,Netty提供异步的、事件驱动的网络应用程序框架和工具,用以快速开发高性能、高可靠性的网络服务器和客户端程序。
你知道为什么Netty这么火吗?与Mina相比又有什么优势? 为什么Netty这么火?与Mina相比有什么优势? **前言: 作为一个学Java的,如果没有研究过Netty,那么你对Java语言的使用和理解仅仅停留在表面水平,会点SSH,写几个MVC,访问数据库和缓存,这些只是初等Java程序员干的事。
另外就是去了解了下netty3,jboss的子项目,netty2和mina作者的另一个作品,关注它是因为在他的benchmark中,netty3的表现很优秀,可以看这篇报告《Performance comparision between java nio framework》。大概看了下他的设计思路,其实与mina并无多大区别,不过使用了一些有意思的trick,例如对于write的处理,一般的nio框架都是放入一个队列,然后注册写事件(队列为空的时候),等待写,写通常也是单线程去写。而netty3做了一个优化,发送消息时同样有一个队列,在放入队列后判断当前是否正在写循环中,如果正在写,那么就注册一个WriteTask唤醒selector等待写;如果没有,那么发送线程立即就去执行这个写操作,这里的一个好处是少了两个开销:注册事件等待触发以及线程切换。Selector.wakeup的操作是比较昂贵的,netty3也做了优化。更多东西等待探索。
山寨nio框架yanf4j已经挺久没有做出任何改进,这次索性将很多过去考虑不成熟、实践中证明不必要的代码删除和简化,然后做了个与mina 2.0 -M5的性能对比,采用的netty3作者的benchmark源码,yanf4j的Echo Server如下:
![](http://www.blogjava.net/Images/OutliningIndicators/ContractedBlock.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockStart.gif)
import java.nio.ByteBuffer;
import org.jboss.netty.benchmark.echo.Constant;
import com.google.code.yanf4j.config.Configuration;
import com.google.code.yanf4j.nio.Session;
import com.google.code.yanf4j.nio.TCPController;
import com.google.code.yanf4j.nio.impl.HandlerAdapter;
public class Yanf4j {
public static void main(String[] args) throws Exception {
boolean threadPoolDisabled = args.length 0
args[0].equals("nothreadpool");
Configuration configuration = new Configuration();
configuration.setCheckSessionTimeoutInterval(0);
configuration.setSessionIdleTimeout(0);
configuration.setTcpNoDelay(true);
configuration.setReadThreadCount(Runtime.getRuntime()
.availableProcessors());
configuration.setPort(Constant.PORT);
configuration
.setSessionReadBufferSize(Constant.INITIAL_READ_BUFFER_SIZE);
TCPController controller = new TCPController(configuration);
controller.setHandler(new EchoHandler());
if (!threadPoolDisabled) {
controller
.setDispatchMessageThreadPoolSize(Constant.THREAD_POOL_SIZE);
}
controller.start();
System.out.println("Yanf4j EchoServer is ready to serve at port "
+ Constant.PORT + ".");
System.out
.println("Enter ant benchmark on the client side to begin.");
System.out.println("Thread pool: "
+ (threadPoolDisabled ? "DISABLED" : "ENABLED"));
}
static class EchoHandler extends HandlerAdapter {
@Override
public void onReceive(final Session session, final Object msg) {
session.send(((ByteBuffer) msg).duplicate());
}
@Override
public void onException(Session session, Throwable t) {
session.close();
}
}
}
最后的分析报表,可以看到yanf4j的性能与mina2的性能相近,不过mina在内存使用上非常狠。此外,Xmemcached 1.1.3 将采用最新的yanf4j 0.7.0。
(横坐标是并发连接数,纵坐标是吞吐量,单位为M/s,测试JDK为1.6.4,具体硬件环境不再详细列出,与xmemcached的benchmark同)
四张图分别是在消息长度为64、256、1024、4096字节下的对比。
文章转自庄周梦蝶 ,原文发布时间2009-06-26
为什么Netty这么火?与Mina相比有什么优势? Netty是什么?为什么这么火? Netty是目前最流行的由JBOSS提供的一个Java开源框架NIO框架,Netty提供异步的、事件驱动的网络应用程序框架和工具,用以快速开发高性能、高可靠性的网络服务器和客户端程序。
你知道为什么Netty这么火吗?与Mina相比又有什么优势? 为什么Netty这么火?与Mina相比有什么优势? **前言: 作为一个学Java的,如果没有研究过Netty,那么你对Java语言的使用和理解仅仅停留在表面水平,会点SSH,写几个MVC,访问数据库和缓存,这些只是初等Java程序员干的事。
相关文章
- Simple Factory vs. Factory Method vs. Abstract Factory【简单工厂,工厂方法以及抽象工厂的比较】
- VS自带WCF测试客户端简单介绍
- 工作总结 1 sql写法 insert into select from 2 vs中 obj文件和bin文件 3 npoi 模板copy CopySheet 最好先全部Copy完后 再根据生成sheet写数据 4 sheet.CopyRow(rowsindex, rowsindex + x); 5 npoi 复制模板如果出现单元格显示问题
- 【ASP.NET MVC系列】浅谈NuGet在VS中的运用
- .NET Core快速入门教程 4、使用VS Code开发.NET Core控制台应用程序
- 【Bug】vs生成失败但没提示错误
- 观察者模式 vs 发布订阅模式
- Minikube vs. kind vs. k3s vs k3d vs MicroK8s
- 颠覆大数据分析之Spark VS分布式共享内存系统
- js中的null VS undefined
- 《数据中心设计与运营实战》——第2章 工作负载和软件基础架构2.1 数据中心VS. 台式机
- 应用负载均衡之LVS(二):VS_TUN和VS_DR的arp问题
- 构建高性能服务 Java高性能缓冲设计 vs Disruptor vs LinkedBlockingQueue
- ubuntu18.04系统环境下使用vs code安装pylint检查python的代码错误
- vs在线工具杂烩
- 突破瓶颈,对比学习:Eclipse开发环境与VS开发环境的调试对比
- 夏梦竹谈Hive vs. HBase的区别
- 关于VS下的应用程序出现0xc000007b的问题以及OpenCV相关的0xc000007b问题