IO模型
2024-06-21 19:08:47 0 举报
JavaIO模型
作者其他创作
大纲/内容
拷贝数据
处理数据
进程反复调用recvfrom方法并等待返回成功标识(循环)
暂无
阻塞
调用
select
1、用用进程想内核发起read读取数据2、等待内核缓冲区数据(阻塞)3、内核缓冲区数据准备好后,复制数据到用户缓冲区(阻塞)4、复制完成,返回成功用户空间和内核空间都是在内存中-read系统调用是将数据从内核空间复制到用户空间,write系统调用是将数据从用户空间复制到内核空间,底层都是由内核来完成操作的。
IO模型-同步非阻塞NIO
返回readable
recvfromN
拷贝完成
丛内核拷贝数据到用户空间
内核空间
等待数据
返回
recvfrom2
IO模型-IO多路复用
recvfrom
调用返回
数据就绪
用户空间
进程调用select,同时监听多个sockets,并阻塞等待数据
recvfrom1
非阻塞
IO模型-同步阻塞BIO
等待
1、应用进程向内核发起read读取数据2、数据没有准备好就直接返回ewouldblock错误(非阻塞)3、应用进程不断发起read读取数据4、内核缓冲区数据准备好后,将数据复制到用户缓冲区(阻塞)5、复制完成,返回成功-内核空间数据准备好前,线程都不阻塞-线程会轮询确认内核数据是否准备好,准备好后,就会进行数据复制- BIO是面向流的,是单向通道,NIO是面向缓冲区的,是双向通道- 这个NIO模型不是JAVA中NIO,这个循环会循环所有socket连接,性能较差
1、进程受阻于select调用,等待多个socket中的任意一个可读(阻塞)2、当socket变成可读时(说明内核缓冲区数据已经准备好),用户进程发起读取数据,将数据拷贝到用户的缓冲区(阻塞)3、复制完成,返回成功-Java中的NIO就是IO多路复用,Linux环境下底层使用的epoll-该模型适用于连接数多,连接时间短的场景-select阻塞,等待所有socket中的任意一个变成可读
0 条评论
回复 删除
下一页