三大I/O模型

目录

BIO-阻塞IO

说明

缺点

NIO-非阻塞IO

说明

好处

缺点

优化

IO多路复用


BIO-阻塞IO

说明

从客户端发出请求到内核把数据拷贝到用户空间都处于阻塞状态。

缺点

想要同时处理多个客户端请求就只能开启多线程进行处理,但是每次开启多线程就会涉及到用户空间和内核空间的切换,性能较差。而且如果用户过多,系统很容易耗尽线程资源,容易造成性能瓶颈。

NIO-非阻塞IO

说明

客户端发出请求后不会一直阻塞等待,而是会去做其他的操作,然后采用轮询的机制每隔一段时间查询看内核的数据是否准备好,直到数据准备好之后才阻塞的将数据拷贝到用户空间。

好处

  1. 使用一个线程就能处理多个客户端请求。
  2. 客户端发送请求后不用阻塞地等待内核把数据拷贝到用户空间。

缺点

  1. 需要不断地进行轮询,每一次轮询进行read操作都涉及了用户空间和内核空间的切换,拉跨效率。
  2. 如果同时有一千个客户端请求,但是只要有一两个客户端传递信息。但是仍然会轮询每个连接进行 read 尝试,会造成 CPU 的空转,甚至会把服务器拉垮。

优化

尝试将对客户端请求的轮询 read 操作放到内核空间进行,从而解决了用户空间和内核空间切换导致的性能问题。

IO多路复用

使用一个线程去监听多个用户连接,只有当用户连接可读可写的时候才会回调通知,告诉服务端内核空间的数据已准备就绪,并将准被就绪的客户端连接放入到集合中,这样无需遍历所有客户端连接来判断哪个客户端连接准备就绪,提高了性能。

  • 6
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值