Java教程:Netty知识点详解(二)

开课吧开课吧锤锤2021-02-23 11:47

近年来,随着云计算、大数据等热门技术的发展和普及,Java在企业中越来越受到重视,公司对于Java人才需求也是每年都在增长,对于这样热门的行业,很多人都是心动的,那么对于如何学习,怎么提高Java的技术,那就来看看本篇文章吧。

开课吧广场Java教程

Java BIO与NIO对比

BIO(传统IO):

BIO是一个同步并阻塞的IO模式,传统的 java.io 包,它基于流模型实现,提供了我们最熟知的一些 IO 功能,比如File抽象、输入输出流等。交互方式是同步、阻塞的方式,也就是说,在读取输入流或者写入输出流时,在读、写动作完成之前,线程会一直阻塞在那里,它们之间的调用是可靠的线性顺序。

NIO(Non-blocking/New I/O)

NIO 是一种同步非阻塞的 I/O 模型,于 Java 1.4 中引入,对应 java.nio 包,提供了 Channel , Selector,Buffer 等抽象。NIO 中的 N 可以理解为 Non-blocking,不单纯是 New。它支持面向缓冲的,基于通道的 I/O 操作方法。 NIO 提供了与传统 BIO 模型中的 Socket ServerSocket 相对应的 SocketChannelServerSocketChannel 两种不同的套接字通道实现,两种通道都支持阻塞和非阻塞两种模式。对于高负载、高并发的(网络)应用,应使用 NIO 的非阻塞模式来开发

BIO与NIO的对比

IO模型 BIO NIO
通信 面向流 面向缓冲
处理 阻塞 IO 非阻塞 IO
触发 选择器

NIO 的 Server 通信的简单模型:

Java

BIO 的 Server 通信的简单模型:

Java

NIO的特点:

1、一个线程可以处理多个通道,减少线程创建数量;

2、读写非阻塞,节约资源:没有可读/可写数据时,不会发生阻塞导致线程资源的浪费

以上内容由开课吧老师敖丙提供,更多Java教程尽在开课吧广场Java教程频道。更多免费课程可以关注公众号“码农集散地”

上一篇:Java教程:Netty知识点详解(三 )下一篇:Java教程:Netty知识点详解(一)

最新文章

文章图0

如何在大规模 Kubernetes 集群上实现高 SLO?

Pod创建成功率:这是一个非常重要的指标,蚂蚁集团一周的Pod创建量在百万级别,如果成功率波动会造成大量Pod失败,同时Pod成功率下跌也是集群异常的最直观反映;

2021-03-05 16:20:04

文章图1

MySQL不建议delete删除数据的原因是什么?(二)

MySQL内部不会真正删除空间,而且做标记删除,即将delflag:N修改为delflag:Y,commit之后会会被purge进入删除链表,如果下一次insert更大的记录,delete之后的空间不会被重用,如果插入的记录小于等于delete的记录空会被重用,这块内容可以通过知数堂的innbloc

2021-03-05 11:45:44

文章图2

MySQL不建议delete删除数据的原因是什么?(一)

物理上主要由系统用户数据文件,日志文件组成,数据文件主要存储MySQL字典数据和用户数据,日志文件记录的是datapage的变更记录,用于MySQLCrash时的恢复。

2021-03-05 11:36:22

文章图3

Java教程:MySQL如何设计索引更高效?(五)

同时也介绍了如何更好做MySQL索引设计,包括前缀索引,复合索引的顺序问题以及MySQL8.0推出的索引跳跃扫描,我们都知道,索引可以加快数据的检索,减少IO开销,会占用磁盘空间,是一种用空间换时间的优化手段,同时更新操作会导致索引频繁的合并分裂,影响索引性能,在实际的业务开发中,如何根据业务场景去

2021-03-05 11:29:12

文章图4

Java教程:MySQL如何设计索引更高效?(四)

在单列索引不能很好的过滤数据的时候,可以结合where条件中其他字段来创建复合索引,更好的去过滤数据,减少IO的扫描次数,举个例子:业务需要按照时间段来查询交易记录,有如下的SQL:

2021-03-05 11:25:02