【JAVA NIO简介】

一、NIO简介
(1)Java BIO : 同步并阻塞(传统阻塞型),服务器实现模式为一个连接一个线程,即客户端有连接请求时服务器端就需要启动一个线程进行处理。
bio

(2)Java NIO : 同步非阻塞,服务器实现模式为一个线程处理多个请求(连接),即客户端发送的连接请求都会注册到多路复用器上,多路复用器轮询到连接有I/O请求就进行处理。
nio
二.操作系统的几个概念
1、内核态和用户态
内核态:cpu可以访问内存的所有数据,包括外围设备,例如硬盘,网卡,CUP也可以将自己从一个程序切换到另一个程序。
用户态:只能受限的访问内存,且不允许访问外围设备,占用CPU的能力被剥夺。
2、系统调用
JAVA帮我们实现提供了所有系统调用所构成的集合即程序接口或应用编程接口(Application Programming Interface,API)
3、系统中断
zd

4、DMA
CPU需要访问外设(磁盘、网卡、usb)的数据时,将任务丢给DMA,有DMA负责利用总线将数据先拷贝到内存,DMA传输前,CPU要把总线控制权交给DMA控制器,而在结束DMA传输后,DMA控制器应立即把总线控制权再交回给CPU。传输结束后,发出中断信号,通知CPU。
dma

5、数据结构位图bitmap:
就是一个标识
在select系统调用中用bitmap
在poll系统调用中用链表
在Epoll系统调用中用红黑树

三.NIO系统调用:
1.select系统调用
select

2.poll系统调用
poll

3.Epoll系统调用
epoll
红黑树无上限,不用拷贝(共享资源)

四、Java的NIO编程
Java NIO三大核心部分:

一.Buffer(缓冲区):每个客户端连接都会对应一个Buffer,读写数据通过缓冲区读写。

二.Channel(通道):每个Channel用于连接Buffer和Selector,通道可以进行双向读写。

三.Selector(选择器):一个选择器可以对应多个通道,用于监听多个通道的事件。Selector可以监听所有的Channel是否有数据需要读取,当某个Channel有数据时,就去处理,所有Channel都没有数据时,线程可以去执行其他

import org.junit.Test;

import java.io.FileOutputStream;
import java.io.IOException;
import java.nio.ByteBuffer;
import java.nio.IntBuffer;
import java.nio.channels.FileChannel;
import java.nio.charset.StandardCharsets;


public class NioTest {
   
@Test
    public void bufferTest (){
   
    IntBuffer buffer = IntBuffer.allocate(10);
    buffer.put(new int[]{
   1,2,3,4,5});
    //指针回调,现在的指针在写的上面
    buffer.flip()</
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

长安归故里♬

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值