IO精讲
文章平均质量分 90
小鱼儿2020
这个作者很懒,什么都没留下…
展开
-
网络与IO知识扫盲(5):C10K问题、BIO的弊端与NIO的引入
C10K 问题C10K 问题: http://www.kegel.com/c10k.html我们使用BIO的时候,来一个连接就抛出一个线程。被抛出的独立的线程进行阻塞,等待接收已连接的client发来的数据,这样不会影响其他client继续连接。每个线程自己忙自己的。但是随着连接数的变大,抛出的线程越多,由于线程之间的切换,系统的性能会越来越低。举一个例子一个客户端可以通过2个不同的ip,与服务端创建2*65000个连接。C10Kclient.javapackage com.bjmashibi翻译 2021-08-07 22:55:10 · 453 阅读 · 0 评论 -
网络与IO知识扫盲(4):从系统调用的角度,剖析 Socket 的连接过程、BIO 的连接过程
Socket的连接过程、TCP的一些参数用到的命令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.InputS翻译 2021-08-07 22:23:11 · 374 阅读 · 0 评论 -
网络与IO知识扫盲(3)- 内核中PageCache、mmap作用、Java文件系统IO、NIO、内存中缓冲区作用
线性地址和物理地址的映射程序在物理上是不连续的程序在运行的时候有虚拟地址,是线性地址空间映射依赖于CPU的MMU单元,以页(4KB)为单位程序运行的时候,可以预分配一些空间,但不会做全量分配。如果程序跑着跑着,想要访问一个地址的时候发现没有,此时会产生缺页异常,一个软中断,CPU去把缺的页补上之后,从内核态回到用户态,才能继续运行。程序跑起来的步骤:程序是硬盘上的一个文件,二进制的,包括代码段,假设整个程序运行起来需要用到 10*4kB 空间程序运行时,可能是先加载 1*4kB 进来,后面.翻译 2021-08-07 21:16:52 · 849 阅读 · 0 评论 -
网络与IO知识扫盲(2)-PageCache
文章目录为了提升IO的效率,计算机的整体各处都是存在页缓存的概念的。作为应用进程来说,一般都会存在以4k为单位的缓存页,也就是buffer,可以想象java中的bufferreader等。。接着,作为系统内核来说,它内部也存在页缓存(pagecache)。最后,对于硬盘的驱动本身,也存在缓冲区。因此可以想象,读取一份文件,会从磁盘驱动本身开始,每次读到缓冲区大小的内容才会向上级返回,这样大大提高IO的效率。而除了多级缓存之外,我们也不难想到,IO是个很慢的操作,如果一直让CPU去频繁的跟进IO翻译 2021-08-07 20:40:02 · 358 阅读 · 0 评论 -
网络与IO知识扫盲(一):Linux虚拟文件系统,文件描述符
文章目录虚拟文件系统VFS为什么要有VFS?pagecacheinode id 号:dirtyflushFD(文件描述符)LINUX中的一切皆文件-:普通文件d:目录l:链接b:块设备证明一切皆文件文件描述符Socket虚拟文件系统VFSVFS(Virtual Filesystem Switch):内核既管内存,又管磁盘IO。作为LINUX内核来说,它在内存中构建了一个虚拟文件系统VFS,不同于windows上的物理文件系统结构,C盘代表的就是物理的C盘分区,D盘就是D盘的物理分区,VFS 虚拟文翻译 2021-08-02 06:56:27 · 569 阅读 · 0 评论