前言这周学习尼恩编著的《Netty、Redis、ZooKeeper高并发实战》,这本书写的很不错,通过十几个例子带领大家去体会高并发如何实现,这周我看了最基础的JavaNOI部分,读书的时候好像明白了作者写的内容,但是又体会不深,非得自己动手写一些书上得例子,有时候还要改动下例子,才能体会深刻,得出自己得结论。下面我们进入例子演示。BlockingIO首先我们会来一个BlockingIO的例子,也就是同步阻塞方式,在Java中,默认创建的socket都是阻塞的。先来看Server端代码,写一个继承ServerSocket的类@Slf4jpublicclassBlockReceiveServer
前面一篇文章提到,Go内置的net/http中使用了BlockingIO,主要体现在两层for循环。但真的是这样吗?本文我们看看Gonet库中 Server.ListenAndServe 的实现细节。net.Listen("tcp",addr) 方法通过系统调用socket、bind、listen生成 net.Listener 对象,在后面的for循环中,通过系统调用accept等待新的tcpconn,将其包装成一个conn对象,在新的goroutine中对这个conn进行处理。这里是典型的pergoroutineperconnection模型。这个环节看起来是阻塞的,但创建socke
前面一篇文章提到,Go内置的net/http中使用了BlockingIO,主要体现在两层for循环。但真的是这样吗?本文我们看看Gonet库中 Server.ListenAndServe 的实现细节。net.Listen("tcp",addr) 方法通过系统调用socket、bind、listen生成 net.Listener 对象,在后面的for循环中,通过系统调用accept等待新的tcpconn,将其包装成一个conn对象,在新的goroutine中对这个conn进行处理。这里是典型的pergoroutineperconnection模型。这个环节看起来是阻塞的,但创建socke
一、概念NIO即NewIO,这个库是在JDK1.4中才引入的。NIO和IO有相同的作用和目的,但实现方式不同,NIO主要用到的是块,所以NIO的效率要比IO高很多。在JavaAPI中提供了两套NIO,一套是针对标准输入输出NIO,另一套就是网络编程NIO。二、NIO和IO的主要区别下表总结了JavaIO和NIO之间的主要区别:1、面向流与面向缓冲JavaIO和NIO之间第一个最大的区别是,IO是面向流的,NIO是面向缓冲区的。JavaIO面向流意味着每次从流中读一个或多个字节,直至读取所有字节,它们没有被缓存在任何地方。此外,它不能前后移动流中的数据。如果需要前后移动从流中读取的数据,需要先将
一、概念NIO即NewIO,这个库是在JDK1.4中才引入的。NIO和IO有相同的作用和目的,但实现方式不同,NIO主要用到的是块,所以NIO的效率要比IO高很多。在JavaAPI中提供了两套NIO,一套是针对标准输入输出NIO,另一套就是网络编程NIO。二、NIO和IO的主要区别下表总结了JavaIO和NIO之间的主要区别:1、面向流与面向缓冲JavaIO和NIO之间第一个最大的区别是,IO是面向流的,NIO是面向缓冲区的。JavaIO面向流意味着每次从流中读一个或多个字节,直至读取所有字节,它们没有被缓存在任何地方。此外,它不能前后移动流中的数据。如果需要前后移动从流中读取的数据,需要先将