非阻塞IO和阻塞IO的区别

本文深入探讨了阻塞IO与非阻塞IO的工作原理及差异,通过具体代码示例展示了阻塞IO如何在等待IO请求时阻塞,而非阻塞IO则通过持续轮询避免阻塞。对比了两种模式下服务端处理客户端连接的方式,以及它们对系统性能的影响。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

public class IOtest{
    public static void main(String[] args){
     try{
    
        ServerSocket server=new ServerSocket(8888);
        Socket clist=server.accept();
        BufferedReader reader=new BufferedReader(new InputStreamReader(clist.getInputStream()));
        /*为收到IO请求时阻塞*/
        System.out.println(reader.readLine());
           
        
         }catch(Exception e) {

                
                }


    }


}

  根据io的工作内容将其划分为IO请求和IO操作连个部分.上述代码示例 中采用的是阻塞IO,可以明确的发现客户端握手成功后,如果服务端并没有收到客户端的 IO 请求,服务端会在reader.readLine()方法处发生阻塞,直到成功接收到IO请求后,服务端才会开始执行实际的IO操作.运用阻塞IO模式进行分布式编程,为了保证服务端与客户端集合的成功会话,我们不得不为每一条客户端连接都开辟独立的线程执行IO操作,当然在实际的开发过程中,这样会大大的降低系统的性能.

  非阻塞IO和阻塞IO最大的不同在于,非阻塞IO并不会在IO请求时产生阻塞,也就是说如果服务器没有收到IO请求时,非阻塞IO会"持续轮询"IO请求,当有请求进来后就开始执行IO操作并阻塞请求进程.java7之后允许开发人员使用IOCP AP{进行异步IO编程,使得开发人员不必再关心IO是否阻塞,因为程序中所有的IO操作将全部委托给操作系统线程去执行,直到最后通知并返回结果.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值