首页 > 其他分享 >笔记

笔记

时间:2024-07-02 23:54:07浏览次数:1  
标签:NIO 阻塞 笔记 Selector 线程 IO 请求

一、JAVA中非阻塞IO

同步:指的是用户进程触发IO操作并等待或者轮询地去查看IO操作是否就绪。
异步:是指用户进程触发IO操作以后便开始做自己的事情,而当IO操作已经完成的时候会得到IO完成的通知。
阻塞:指当试图对该文件描述符进行读写时,如果当时没有东西可读,或者暂时不可写,线程就进入等待状态,直到有东西可读或者可写为止。
非阻塞:是指如果没有东西可读,或者不可写,读写函数马上返回,而不会等待。

BIO(同步阻塞IO)
  同步阻塞式IO,服务器实现模式为一个连接一个线程,即客户端有连接请求时服务器端就需要启动一个线程进行处理,如果这个连接不做任何事情会造成不必要的线程开销。传统的网络连接、Socket采用的就是BIO工作模式,如ServerSocket调用accept方法就会阻塞当前线程。

NIO(同步非阻塞IO)
  服务器实现模式为一个请求一个线程,即客户端发送的连接请求都会注册到多路复用器上,多路复用器轮询到连接有I/O请求时才启动一个线程进行处理。

  JAVA中NIO工作流程主要通过Channel(通道)、Buffer(缓存)、Selector(选择区)实现。首先NIO是面向缓存区的,而传统IO是面向流的,且NIO使用的Channel是双向的,即可以用来读又可以写。

  JAVA的NIO中提供了SocketChannel、ByteBuffer、ServerSocketChannel、Selector等类实现了客户端和服务器的NIO工作模式。客户端创建SocketChannel和ByteBuffer对象连接到对应主机,通过循环探测缓存区实现发送和数据接收。服务器则创建ServerSocketChannel、SocketChannel、Selector对象,先将Channel注册到Selector上,每次则通过循环遍历Selector获取Set对象得到有效请求、之后则可以派生出子线程针对具体请求进行处理。

AIO(异步非阻塞IO)
  服务器实现模式为一个有效请求一个线程,客户端的I/O请求都是由OS先完成了再通知服务器应用去启动线程进行处理。与NIO不同,当进行读写操作时,只须直接调用API的read或write方法即可。这两种方法均为异步的,对于读操作而言,当有流可读取时,操作系统会将可读的流传入read方法的缓冲区,并通知应用程序。对于写操作而言,当操作系统将write方法传递的流写入完毕时,操作系统主动通知应用程序。

二、链接

ThreadLocal类Volatile关键字Synchronized
注解注解处理器自定义注解处理器
动态代理反射基础反射反射详解反射用法

标签:NIO,阻塞,笔记,Selector,线程,IO,请求
From: https://www.cnblogs.com/idempotent/p/11920501.html

相关文章

  • ThreadLoop实践学习笔记
    背景在日常工作和学习源码过程中,经常可以看到ThreadLoop的运用,发现ThreadLoop作为一个基础工具,在具体项目中有不同而又十分相似的实现,虽然核心的机制万变不离其宗(IO多路复用),但面向的业务场景不同导致了不同的实践结果,目前见过有几种ThreadLoop的实践,本文做一个分析记录和知识点的......
  • Linux源码阅读笔记08-进程调度API系统调用案例分析
    kthread_create_on_nodekthread_create_on_node函数功能:指定存储节点创建新内核线程。源码如下:操作实战#include<linux/module.h>#include<linux/pid.h>#include<linux/sched.h>#include<linux/kthread.h>#include<linux/wait.h>intMyThreadFunc(void*......
  • 维克日记 v0.4.2:开发者友好的数字化笔记工具
     维克日记,专为技术开发者和笔记爱好者设计的数字化笔记工具,以其强大的功能和灵活的配置赢得了用户的好评。软件采用Markdown语法,提供实时预览功能,让您的笔记编辑更加高效和直观。维克日记的用户界面简洁而功能齐全,无需复杂的设置,即可开始记录您的思路和创意。它支持表格可视化......
  • 江协科技51单片机-学习笔记(1)-课程简介
    1、声明本人最近在学习b站up主“江协科技”制件的“51单片机入门教程”,为了便于自己以后复习51单片机的相关知识,遂将自己学习过程中认为重要的知识点进行了笔记记录。本人将学习笔记发布在CSDN上,目的是方便小伙伴们一起学习和交流单片机相关知识,共同进步。本人所写的笔记和up......
  • DApp设计与开发 课程笔记(六):NFT交易市场后端开发
    笔记对应课程内容为成都信息工程大学区块链产业学院老师梁培利的DApp设计与开发17-18课笔记中提到的名词不做过多解释不懂就搜!tokenuri对应一个metadata的json数据上传一个图片,将图片上传到IPFS,获得一个cid,然后将json格式的metadata上传到IPFS,然后给用户发送一个NFT......
  • 大模型技术方向:基于星火大模型的群聊对话分角色要素提取挑战赛笔记
    AI夏令营#Datawhale#夏令营基于星火大模型的群聊对话分角色要素提取挑战赛举办方:科大讯飞股份有限公司一、赛事背景在当今数字化时代,企业积累了丰富的对话数据,这些数据不仅是客户与企业之间交流的记录,更是隐藏着宝贵信息的宝库。在这个背景下,群聊对话分角色要素提取成为了企......
  • Python学习笔记
    数据类型和变量字面量:在代码中,被写下来的固定的值。常见有6中,数字、字符串、列表、元组、集合、字典字符串:由任意数量的字符如中文、英文、各类符合、数字等组成。如“你好”,“hello”,在Python中被双引号引起来的就是字符串。注释:在程序代码中对程序代码进行解释说明的文字。......
  • 【Java学习笔记】方法的使用
    【Java学习笔记】方法的使用一、一个例子二、方法的概念及使用(一)什么是方法(二)方法的定义(三)方法调用的执行过程(四)实参和形参的关系(重要)(五)没有返回值的方法三、方法重载(一)为什么需要方法重载(二)方法重载概念(三)方法签名四、递归(一)生活中的故事(二)递归的概念(三)递归执行过程分......
  • 【esp32 学习笔记】将lvgl融入esp-idf项目中
    lvgl科普lvgl 主要特点:Github库整体了解版本号编排原则屏幕兼容性LVGL 问题处理: lvgl与 FreeRTOS由于esp-idf本身带了FreeRTOS系统,因此需要关注一下操作系统相关的内容:voidlvgl_thread(void){while(1){uint32_ttime_till_next;......
  • Java学习笔记
      Linux系统-部署-运维系列导航  maven多环境配置,根据激活环境,只打包对应的配置文件1.多环境配置<profiles><profile><id>dev</id><properties><!--环境标识,需要与配置文件的名称相对应--><......