首页 > 其他分享 >1.1.NIO-三大组件

1.1.NIO-三大组件

时间:2022-10-12 13:15:41浏览次数:44  
标签:1.1 stream selector 线程 三大 channel NIO

1、NIO基础

non-blocking io 非阻塞io

1.1、三大组件
1.1.1、Channel&Buffer

channel类似于stream,它就是读写数据的双向通道,可以从channel将数据读入buffer,也可以将buffer的数据写入channel,之前的stream要么是输入,要么是输出,channel比stream更为底层

常见的channel:

  • FileChannel 文件传输通道
  • DatagramChannel UDP传输通道
  • SocketChannel TCP传输通道
  • ServerSocketChannel TCP传输通道

Buffer永来缓冲读写数据,常见buffer有

  • ByteBuffer
    • MappedByteBuffer
    • DirectByteBuffer
    • HeapByteBuffer
  • ShortBuffer
  • IntBuffer
  • LongBuffer
  • FloatBuffer
  • DoubleBuffer
  • CharBuffer
1.1.2、Selector

selector 需要结合服务器的设计演化来理解它的用途

多线程版设计

缺点:

  • 内存占用高
  • 线程上下二文切换成本高
  • 只适合连接数少的场景

线程池版设计

缺点:

  • 阻塞模式下,线程仅能处理一个socket连接
  • 仅适合短链接场景

Selector版设计

selector的作用就是配合一个线程来管理多个channel,获取这些channel上发生的事件,这些channel工作在非阻塞模式下,不会让线程吊死在一个channel上。适合连接数特别多,但流量低的场景

调用selector的select()方法会阻塞直到channel发生了读写就绪事件,然后select方法会返回这些事件交给thread来处理

标签:1.1,stream,selector,线程,三大,channel,NIO
From: https://www.cnblogs.com/jpymll/p/16784153.html

相关文章

  • 【Py4OH 1.1.0】新版发布及鸿蒙设备Python网络编程简介
            大家好,自从去年(没错,是去年)发布了​​Py4OH第一个正式版​​之后,我开启了佛系开发模式,没有继续更新了。有小......
  • #打卡不停更#在开鸿智谷NiobeU4移植lvgl并实现ADC按键状态显示
    本文主要分享在开鸿智谷NiobeU4开发板移植lvgl经验,并实现按键按下sw4显示SW4Pressed松开显示SW4Release,整理踩坑经验分享如下。1.移植准备开鸿智谷NiobeU4开发板Openhar......
  • hive-1.1.0-cdh5.9.0安装
    hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供简单的sql查询功能,可以将sql语句转换为MapReduce任务进行运行。其优点是学习成本低,可......
  • 516多表关系案例和517三大范式概念
    多表关系案例--创建旅游线路分类表tab_categore--cid旅游限度分类主键,自动增长--cname旅游线路分类名称非空,唯一字符串100CREATETABLEtab_category(cid......
  • task1.1
     #include<stdio.h>intmain(){printf("O\n");printf("<H>\n");printf("II\n");printf("O\n");printf("<H>\n");printf("II\n");return0;} ......
  • JAVA的优势和特性&JAVA的三大版本&JDK/JRE/JVM
    JAVA的优势和特性简单性面向对象(万物皆对象)可移植性(writeonce,runanywhere)高性能分布式(URL、远程调用)动态性(反射)多线程安全性(防病毒、方窃取,异常机制)健壮性......
  • Netty学习之NIO基础
    Netty学习之NIO基础本博客是根据黑马程序员Netty实战学习时所做的笔记可先参考博客JavaNIO一、三大组件简介Channel与BufferJavaNIO系统的核心在于:通道(Channel)和......
  • 抽象类与接口的比较?构造方法,构造方法重载,什么是复制构造方法?求N的阶乘?Java环境搭建:J
    大家可分享关于Java微服务相关知识,包括但不限于Java微服务开发经验、架构组成、技术交流、中间件等内容,我们鼓励springcloud架构为基础发散出击,从而达到技术积累的目的,快来......
  • 范式概述和三大范式详解
    范式概述概念:设计数据库时,需要遵循的一些规范。要遵循后边的范式要求,必须先遵循前边的所有范式要求,设计关系数据库时,尊从不同的规范要去,射击诸合理的关系型数据库,这些不......
  • drf三大认证之频率类源码解析
    主要从SimpleRateThrottle的allow_request方法开始分析第一步1.查看SimpleRateThrottle的allow_requestifself.rateisNone:returnTrue#表示没......