javaweb+javaSE面试题.zip
88、什么是阻塞IO?什么是非阻塞IO?阻塞情况(read, recv, msgrcv的行为): 1.如果没有数据,会一直等待; 2.有数据时候会读到用户指定的缓存区,但是如果数据量比较少,少于参数指定的大小,read也会立即返回,而不会一直等到数据足够。阻塞读的原则:数据不超过指定长度的时候,有多少读多少,没有数据就会一直等待。所以一般情况下,都需要采用循环读的方式,因为一次read不能保证读完需要的全部数据。非阻塞情况(read, recv, msgrcv的行为) 1.没有数据,就立即返回; 2.有数据,也是采用有多少读多少的方式来处理。所以,read完一次,要判断读到的数据长度或者错误码再决定是否再次读取。注意这里的EAGAIN错误码是需要继续读取,而返回0是对方已关闭连接。写:阻塞情况(write/send/msgsnd的行为)与阻塞读有多少读多少不同的是,阻塞写会一直阻塞,直到所有数据都完成,再返回。这是因为,读的时候不知道需要读多少,防止一直等不到足够的数据;而写的时候是知道要写多少数据的。不过也可能被中断,大多数情况是能够写完的。
用户评论