引言
java程序对系统内核io的时候有哪些系统调用发生 内核有没有参与到io中?
NIO
模拟socket通讯TestSocket类
简单描述
1、创建一个socket server进程绑定8090端口 2、等待客户端连接 一有客户端连接则创建一个线程来解析数据流
抓取指定进程及子进程和子线程对内核系统有没有调用
strace -ff -o ./ooxx java TestSocket
进程id是2878 通过进程号可以得到该进程下有多少个线程 该进程有多少个文件描述符 也可以查看该进程的网络状态 查看该进程的情况 cd /proc/2878 cd task 查看当前进程开启了多少线程
1、任何一个程序都有io 标准输入0 system.in ,标准输出1 system.out ,错误输出2 system.error 2、java中以对象形式存在 linux一切皆文件 以数字代表 java中变量在linux中用数值代替变量 引用了其中一个流 3、runtime运行时的jar包库 jvm启动的时候会加载 4、2个socket 一个是ipv4 一个是ipv6 没有客户端与服务端连接 却有了socket文件描述符
网络状态命令
netstat -antp 显示所有 tcp协议 打出进程号
只有服务端有监听状态
客户端与socket服务端建立连接
nc(netcat)是linux操作系统程序 可以任何人建立tcp socket连接 nc localhost 8090 网络连接状态中会出现一个新的状态 文件描述符中会多一个 代表新的连接 此时只建立了tcp连接 还没有发送数据