疯狂Java讲义:使用NIO实现非阻塞Socket通信(1)
关于 NIO non-blocking 非阻塞式 socket,下面有一个 NBTimeServer 例子,它讲的是服务端。客户端与此类似,http://docs.oracle.com/javase/7/docs/technotes/guides/io/example/index.html NIO 通信线程样例。
《java从入门到精通》(第3版) 【内容介绍】 本书从初学者角度出发,通过通俗易懂的语言、丰富多彩的实例,详细介绍了使用Java语言进行程序开发应该掌握的各方面技术。
。服务端工程NioServer.java: 采用nio 方式的异步socket通信,不仅可以实现你的服务器还可以让你多学习一下什么是nio 2。
但是Java也有很多方法可以进行进程间通信的。除了上面提到的Socket之外,当然首选的IPC可以使用Rmi,或者Corba也可以。另外Java nio的MappedByteBuffer也可以通过内存映射文件来实现进程间通信(共享内存)。
在Java中,我们使用socket进行网络通信,IO主要有三种模式,主要看 内核支持 哪些。同步阻塞IO ,每个客户端的Socket连接请求,服务端都会对应有个处理线程与之对应,对于没有分配到处理线程的连接就会被阻塞或者拒绝。
而对于非阻塞状态, 如果没有东西可读, 或者不可写, 读写函数马上返回, 而不会等待 。一种常用做法是:每建立一个Socket连接时,同时创建一个新线程对该Socket进行单独通信(采用阻塞的方式通信)。
Java中IO与NIO的区别和使用场景
IO与NIO的区别 首先它们都属于IO,只是处理的方式不同。java 中, IO 属于 流式IO ,即 Stream/IO 。它只能一个字节一个字节的处理数据。
java.io.*中)与 NIO 最重要的区别是数据打包和传输的方式。正如前面提到的,原来的 I/O 以流的方式处理数据,而 NIO 以块的方式处理数据。面向流 的 I/O 系统一次一个字节地处理数据。
Java IO和NIO之间第一个最大的区别是,IO是面向流的,NIO是面向缓冲区的。 Java IO面向流意味着每次从流中读一个或多个字节,直至读取所有字节,它们没有被缓存在任何地方。此外,它不能前后移动流中的数据。
这种服务方式跟传统的区别有两个:增加了一个角色,要有一个专门负责收集客人需求的人。NIO里对应的就是Selector。由阻塞服务方式改为非阻塞服务了,客人吃着的时候服务员不用一直侯在客人旁边了。
Java.nio.charset.Charset处理了字符转换问题。它通过构造CharsetEncoder和CharsetDecoder将字符序列转换成字节和逆转换。
同步指的是必须等待IO缓冲区内的数据就绪,而非阻塞指的是,用户线程不原地等待IO缓冲区,可以先做一些其他操作,但是要定时轮询检查IO缓冲区数据是否就绪。Java中的NIO 是new IO的意思。其实是NIO加上IO多路复用技术。
疯狂Java讲义:使用NIO实现非阻塞Socket通信(2)[2]
1、如果要证明是java的nio单独使用非阻塞I/O,真没办法!!阻塞非阻塞要查看进程。。不过还有种说法,叫异步非阻塞。上面那段,是用异步方式创建连接,进程当然没有被阻塞。
2、,NIO 本身是提供非阻塞式的网络访问,使用 selector 来轮询事件,因此用 selector 才能改进性能,一个 selector 可以用在多个 socket 通信中而不像以前传统的一个线程一个 socket 流这么麻烦地管理它们。
3、关于 NIO non-blocking 非阻塞式 socket,下面有一个 NBTimeServer 例子,它讲的是服务端。客户端与此类似,http://docs.oracle.com/javase/7/docs/technotes/guides/io/example/index.html NIO 通信线程样例。
java.nio的描述
nio 是New IO 的简称,在jdk4 里提供的新api 。Sun 官方标榜的特性如下: 为所有的原始类型提供(Buffer)缓存支持。字符集编码解码解决方案。 Channel :一个新的原始I/O 抽象。 支持锁和内存映射文件的文件访问接口。
NIO即New IO,这个库是在JDK4中才引入的。NIO和IO有相同的作用和目的,但实现方式不同,NIO主要用到的是块,所以NIO的效率要比IO高很多。
NIO以通道channel和缓冲区Buffer为基础来实现面向块的IO数据处理,MINA是开源的。
Java NIO是在jdk4开始使用的,它既可以说成“新I/O”,也可以说成非阻塞式I/O。 由一个专门的线程来处理所有的 IO 事件,并负责分发。 事件驱动机制:事件到的时候触发,而不是同步的去监视事件。
java.nio.Buffer 类描述 java.nio.ByteBuffer 包含字节类型。
java里面的NIO是什么,有什么用?
nio是针对原java io所开发的一套新的io api接口。Java NIO(New IO)是从Java 4版本开始引入的一个新的IO API,可以替代标准的Java IO API。
Java NIO是在jdk4开始使用的,它既可以说成“新I/O”,也可以说成非阻塞式I/O。 由一个专门的线程来处理所有的 IO 事件,并负责分发。 事件驱动机制:事件到的时候触发,而不是同步的去监视事件。
java.nio 包定义了缓冲区类,这些类用于所有 NIO API。java.nio.charset包中定义了字符集API,java.nio.channels包中定义了信道和选择器 API。
NIO以通道channel和缓冲区Buffer为基础来实现面向块的IO数据处理,MINA是开源的。
想要突破IO的瓶颈,就需要使用到上文提到的多路复用模式,所以在Java中,为了突破这样的场景,利用多路复用来实现NIO,非阻塞式的IO。那么什么是阻塞与非阻塞的IO呢,其实就是针对于实际的IO操作过程中,是否需要等待的情况。
Java NIO : 同步非阻塞,服务器实现模式为一个请求一个线程,即客户端发送的连接请求都会注册到多路复用器上,多路复用器轮询到连接有I/O请求时才启动一个线程进行处理。
北大青鸟设计培训:Java开发服务器的线程怎么处理?
1、BIO线程模型在JDK4中引入JavaNIO之前,所有基于Java的Socket通信都使用了同步阻塞模式(BIO)。这种请求-响应通信模型简化了上层的应用程序开发上,但在具有性能和可靠性的情况下,存在一个巨大的瓶颈。
2、如果真的需要终止一个线程,可以使用以下几种方法:让线程的run()方法执行完,线程自然结束。
3、创建线程比创建进程要快,所需开销很少。(4)利于充分发挥多处理器的功能。通过创建多线程进程(即一个进程可具有两个或更多个线程),每个线程在一个处理器上运行,从而实现应用程序的并发性,使每个处理器都得到充分运行。
4、总结多线程程序都是并发处理的。如果CPU只有一个,那么并发处理就是顺序执行的,而如果有多个CPU,那么并发处理就可能会并行运行。等待队列所有实例都拥有一个等待队列,它是在实例的wait方法执行后停止操作的线程队列。
5、要使得对象是线程安全的,要采用同步机制来协同对对象可变状态的访问。Java常用的同步机制是Synchronized,还包括volatile类型的变量,显示锁以及原子变量。