非阻塞IO和阻塞IO的区别

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操作将全部委托给操作系统线程去执行,直到最后通知并返回结果.

你可能感兴趣的:(javase)