美文网首页
笔记:计算机基础知识和Java IO

笔记:计算机基础知识和Java IO

作者: M_lear | 来源:发表于2022-02-13 11:53 被阅读0次

计算机基础知识

内核空间:专门给操作系统用的【物理】内存空间(操作系统的专属空间)
用户空间:给用户程序使用的【虚拟】内存空间

操作系统就是一个【资源管家】,管理一切用户程序需要使用到的资源,cpu资源(线程调度)、内存资源以及所有的外设资源(外部设备)

用户程序和所有外设的交互都需要经过操作系统

虚拟内存的作用:进程隔离、提供比物理内存更大的内存空间

计算机包括一下五大部件:运算器、控制器、存储器、输入和输出设备

IO:I数据从外设到内存,O数据从内存到外设
所以不管什么IO都逃不开操作系统

Java IO

java IO从使用上可以分为两类:一,针对文件的磁盘IO;二,针对socket的网络IO。
BIO是面向流的阻塞IO,分为字节流和字符流两类,NIO是面向块的非阻塞IO。
NIO包含三大核心:Selector、Channel、Buffer
对文件IO时,只会用到Channel和Buffer(DirectByteBuffer可以使用直接内存作为Buffer,减少数据拷贝次数)
只有网络IO时,才会用到基于IO多路复用的Selector

BIO下的网络模型,使用一个线程接收连接,每来一个连接,再使用一个线程处理连接中的数据读写。接收连接和从连接上接收数据都是阻塞操作。

BIO网络模型的缺点,在于一个线程处理一个socket连接。
引申出一个主要缺点:
服务器能同时处理的连接数受限于线程个数。
引申出一个次要缺点:
一个线程处理一个socket连接,如果客户端建立一个请求后,不怎么发数据,又迟迟不断开连接,那处理这个连接的线程大部分时间都处于阻塞状态,那这个线程资源就浪费了。

NIO网络模型,使用一个线程去轮询Selector,每发生一个事件(比如请求连接事件、读事件),就使用一个线程去处理对应socket上的事件。整个过程不会发生线程阻塞。

Selector基于操作系统提供的select、poll或epoll实现的。

select和poll知道有事件发生,但不知道是哪个socket上有事件发生,所以需要轮询所有的socket,时间复杂度为O(n)
epoll是基于事件回调的,不仅知道有事件发生还知道是哪个socket有事件发生,时间复杂度为O(1)

NIO网络模型相较于BIO网络模型的优点:

  1. 线程资源被充分利用,不会阻塞在网络IO上。
  2. 能同时处理的连接数远大于BIO网络模型(不受限于线程个数)

tomcat8默认使用NIO网络模型,默认的最大连接数是1万,默认的最大线程数是200。

IO密集型应用,线程数适合搞多点,因为有很多线程阻塞在IO上,所以多搞点线程可以充分压榨cpu。

cpu密集型应用,线程数最好不要超过机器允许的最大并发数,否则花费在线程切换上的代价会很大。

web应用一般都是IO密集型,为了支持高并发,堆线程数是没用的,像tomcat 200个线程完全够用了,关键是降低数据IO的阻塞时间,对于不着急的IO用mq异步处理,对于着急的IO使用缓存、读写分离、垂直拆分、水平拆分等手段尽量提升IO速度。

相关文章

  • 笔记:计算机基础知识和Java IO

    计算机基础知识 内核空间:专门给操作系统用的【物理】内存空间(操作系统的专属空间)用户空间:给用户程序使用的【虚拟...

  • java File类

    Classic IO 和 NIO java设计之初的IO架构被称为Classic IO。随着计算机的发展以及在硬件...

  • java io

    参考Java IO学习笔记(一):File类Java IO学习笔记(二):RandomAccessFile类Jav...

  • JAVA IO基本知识

    本部分总结一下JAVA IO的相关知识。 全部章节传送门: JAVA IO学习笔记: IO基本知识 JAVA IO...

  • Java基础(面试复习整理)

    基础知识和语法 Java语言初识 计算机语言发展机器语言、汇编、C、C++、Java Java的诞生与发展1995...

  • IO

    java网络编程 阻塞IO NIO 1. java网络编程 基础知识1.ip地址和端口号2.tcp/udp协议3....

  • Java学习

    Java 基础知识点 基础语法 多线程 并发 IO、NIO 集合框架 网络 RMI SQL 上图来自Java 征途...

  • Netty 权威指南笔记(一):网络 I/O 模型和 Java

    Netty 权威指南笔记(一):网络 I/O 模型和 Java IO 入门 Java I/O 模型的实现离不开底层...

  • java基础大纲知识点总结,基础学习进阶必备。

    Java基础知识阶段: day01: 1:课前和学生聊聊学习方法和学习技巧。(了解) 2:计算机基...

  • Java的IO和NIO

    Java的IO和NIO 一、Java的IO Java的IO功能在java.io包下,包括输入、输出两种IO流,每种...

网友评论

      本文标题:笔记:计算机基础知识和Java IO

      本文链接:https://www.haomeiwen.com/subject/cfdflrtx.html