文档章节

Java NIO && Netty的epoll实现

秋风醉了
 秋风醉了
发布于 2016/03/18 23:58
字数 299
阅读 2437
收藏 1

Java NIO && Netty的epoll实现

Java NIO

Java NIO根据操作系统不同, 针对nio中的Selector有不同的实现:

  • macosx: KQueueSelectorProvider

  • solaris: DevPollSelectorProvider

  • Linux: EPollSelectorProvider (Linux kernels >= 2.6)或 PollSelectorProvider

  • windows: WindowsSelectorProvider

所以毋须特别指定, Oracle jdk会自动选择合适的Selector。 如果想设置特定的Selector,可以属性:

-Djava.nio.channels.spi.SelectorProvider=sun.nio.ch.EPollSelectorProvider

 

Netty

自4.0.16起, Netty为Linux通过JNI的方式提供了native socket transport.

使用native socket transport很简单,只需将相应的类替换即可。

NioEventLoopGroup → EpollEventLoopGroup

NioEventLoop → EpollEventLoop

NioServerSocketChannel → EpollServerSocketChannel

NioSocketChannel → EpollSocketChannel

如果使用maven, 加入相应的依赖:

<dependency>
    <groupId>io.netty</groupId>
    <artifactId>netty-transport-native-epoll</artifactId>
    <version>${project.version}</version>
    <classifier>${os.detected.classifier}</classifer>
</dependency>

既然如上面所说, Oracle JDK在Linux已经默认使用epoll方式, 为什么netty还要提供一个基于epoll的实现呢?这是stackoverflow(https://stackoverflow.com/questions/23465401/why-native-epoll-support-is-introduced-in-netty)上的一个问题。 Netty的核心开发者 Norman Maurer这么说的:

Netty的 epoll transport 使用 epoll edge-triggered 而 java 的 nio 使用 level-triggered。

另外netty epoll transport 暴露了更多的nio没有的配置参数, 如 TCP_CORK, SO_REUSEADDR等等

=========END=========

本文转载自:http://colobu.com/2014/09/12/java-nio-epoll/

秋风醉了
粉丝 252
博文 532
码字总数 405694
作品 0
朝阳
程序员
私信 提问
Linux IO模型与Java NIO

概述 看Java NIO一篇文章的时候又看到了“异步非阻塞”这个概念,一直处于似懂非懂的状态,想解释下到底什么是异步 什么是非阻塞,感觉抓不住重点。决定仔细研究一下。 本文试图研究以下问题...

yingtju
2018/06/29
0
0
Netty浅析 - 1. 基础

前言 在了解一个事物之前,最好能对它的基本属性和相关概念有个基本的认知,所以学习Netty之前,也有必要了解与Netty相关的基础概念知识;本篇将对Netty做一个基础性的介绍,主要包括Netty的...

简xiaoyao
2018/12/02
0
0
Netty源码—一、server启动(1)

Netty作为一个Java生态中的网络组件有着举足轻重的位置,各种开源中间件都使用Netty进行网络通信,比如Dubbo、RocketMQ。可以说Netty是对Java NIO的封装,比如ByteBuf、channel等的封装让网络...

lacker
2018/07/22
0
0
Netty浅析 - 2. 实现

前言 本篇文章主要分析Netty的系统结构以及其如何实现其对外宣称的特色,如果还未了解Netty的基础知识,最好先阅读本系列的第一篇文章Netty浅析 - 1. 基础 Netty总体结构 这张图摘自Netty官网...

简xiaoyao
2018/12/02
0
0
分别使用Java IO、NIO、Netty实现的一个Echo Server示例

分别使用Java IO、Java NIO、Netty来实现一个简单的EchoServer(即原样返回客户端的输入信息)。 Java IO int port = 9000;ServerSocket ss = new ServerSocket(port);while (true) {final S...

zgw06629
2015/05/24
2.2K
0

没有更多内容

加载失败,请刷新页面

加载更多

java通过ServerSocket与Socket实现通信

首先说一下ServerSocket与Socket. 1.ServerSocket ServerSocket是用来监听客户端Socket连接的类,如果没有连接会一直处于等待状态. ServetSocket有三个构造方法: (1) ServerSocket(int port);...

Blueeeeeee
今天
6
0
用 Sphinx 搭建博客时,如何自定义插件?

之前有不少同学看过我的个人博客(http://python-online.cn),也根据我写的教程完成了自己个人站点的搭建。 点此:使用 Python 30分钟 教你快速搭建一个博客 为防有的同学不清楚 Sphinx ,这...

王炳明
昨天
5
0
黑客之道-40本书籍助你快速入门黑客技术免费下载

场景 黑客是一个中文词语,皆源自英文hacker,随着灰鸽子的出现,灰鸽子成为了很多假借黑客名义控制他人电脑的黑客技术,于是出现了“骇客”与"黑客"分家。2012年电影频道节目中心出品的电影...

badaoliumang
昨天
15
0
很遗憾,没有一篇文章能讲清楚线程的生命周期!

(手机横屏看源码更方便) 注:java源码分析部分如无特殊说明均基于 java8 版本。 简介 大家都知道线程是有生命周期,但是彤哥可以认真负责地告诉你网上几乎没有一篇文章讲得是完全正确的。 ...

彤哥读源码
昨天
15
0
jquery--DOM操作基础

本文转载于:专业的前端网站➭jquery--DOM操作基础 元素的访问 元素属性操作 获取:attr(name);$("#my").attr("src"); 设置:attr(name,value);$("#myImg").attr("src","images/1.jpg"); ......

前端老手
昨天
7
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部