![](https://img-blog.csdnimg.cn/20201220183711712.jpg?x-oss-process=image/resize,m_fixed,h_224,w_224)
网络与IO扫盲
Linux虚拟文件系统,文件描述符,IO重定向,内核中PageCache、mmap作用、Java文件系统IO、NIO、内存中缓冲区作用,从系统调用的角度,剖析 Socket 的连接过程、BIO 的连接过程,C10K问题、BIO的弊端与NIO的引入等等
寒泉Hq
当你试图解决一个你不理解的问题时,复杂化就产生了
展开
-
网络与IO知识扫盲(七):仿照Netty工作架构图,手写多路复用模型
Netty工作架构图根据上图模型,仿照Netty手写一个多路复用模型MainThread.javapackage com.bjmashibing.system.io.testreactor;/** * @author: 马士兵教育 * @create: 2020-06-21 20:13 */public class MainThread { public static void main(String[] args) { //这里不做关于IO 和 业务的事原创 2020-06-21 23:58:47 · 68686 阅读 · 0 评论 -
网络与IO知识扫盲(六):多路复用器
NIO存在的问题NIO的优势:可以通过一个或几个线程来解决N个IO连接的处理NIO存在C10K问题:当客户端连接的数量达到10K时,单线程每循环一次所有的fd,成本是O(n)复杂度,每一次循环都会有10K次系统调用,但是有意义的调用可能只有三五个,大多数调用是无意义的浪费资源。多路复用器还是沿用上一版当中的 Java 代码package com.bjmashibing.system.io;import java.io.IOException;import java.net.InetSocke原创 2020-06-18 12:08:22 · 68831 阅读 · 0 评论 -
网络与IO知识扫盲(五):从 NIO 到多路复用器
NIO 的优劣优势:相比 BIO 来说,NIO 可以通过1个或几个线程,来解决 N 个 IO 连接的处理弊端:当有大量文件描述符存在时,不管你用多少个线程,都是O(n)复杂度的recv调用,需要用户态内核态切换才能实现,而这些调用有很多是无意义的(有数据返回数据,无数据返回-1),浪费资源。read是无罪的,大量无效的read被调用才是性能损耗的关键。下图:左侧是 NIO,右侧是多路复用器。多路复用器的实现常问的几个概念(我们先只关注IO,不关注IO之后的处理)同步:application原创 2020-06-18 01:22:11 · 67522 阅读 · 0 评论 -
网络与IO知识扫盲(四):C10K问题、BIO的弊端与NIO的引入
C10K 问题http://www.kegel.com/c10k.html我们使用BIO的时候,来一个连接就抛出一个线程。被抛出的独立的线程进行阻塞,等待接收已连接的client发来的数据,这样不会影响其他client继续连接。每个线程自己忙自己的。但是随着连接数的变大,抛出的线程越多,由于线程之间的切换,系统的性能会越来越低。举一个例子一个客户端可以通过2个不同的ip,与服务端创建2*65000个连接。C10Kclient.javapackage com.bjmashibing.system原创 2020-06-17 18:14:25 · 70349 阅读 · 1 评论 -
网络与IO知识扫盲(三):从系统调用的角度,剖析 Socket 的连接过程、BIO 的连接过程
前置知识用到的命令netstat -natp 查看网络连接和占用的端口tcpdump -nn -i eth0 port 9090 开监听抓取数据包lsof -p <进程号>查看某个进程已经打开的文件状态Socket服务端代码package com.bjmashibing.system.io;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStream;import j原创 2020-06-16 20:41:59 · 66324 阅读 · 0 评论 -
网络与IO知识扫盲(二):内核中PageCache、mmap作用、Java文件系统IO、NIO、内存中缓冲区作用
面试题:epoll 是怎么知道数据到达的?前置知识线性地址和物理地址的映射程序在物理上是不连续的程序在运行的时候有虚拟地址,是线性地址空间映射依赖于CPU的MMU单元,以页(4KB)为单位程序运行的时候,可以预分配一些空间,但不会做全量分配。如果程序跑着跑着,想要访问一个地址的时候发现没有,此时会产生缺页异常,一个软中断,CPU去把缺的页补上之后,从内核态回到用户态,才能继续运行。程序跑起来的步骤:程序是硬盘上的一个文件,二进制的,包括代码段,假设整个程序运行起来需要用到 10*4k原创 2020-06-16 15:34:49 · 68123 阅读 · 3 评论 -
网络与IO知识扫盲(一):Linux虚拟文件系统,文件描述符,IO重定向
系统IO原理在 Linux 中:VFS(Virtual Filesystem Switch):虚拟文件系统,是一个目录树。树上不同的节点可以映射到物理的文件地址,可以挂载。相当于一个解耦层,在具体的文件系统之上抽象的一层,为能够给各种文件系统提供一个通用的接口,使上层的应用程序能够使用通用的接口访问不同文件系统、不同的驱动。inode号:文件打开的时候有一个inode号,读到pagecache页缓存中。两个程序如果打开的是统一文件,共享的是同一个pagecache 4k。如果后续我们对page原创 2020-06-14 14:20:01 · 69238 阅读 · 0 评论