在java1.4之前,java对IO操作并不友好.主要问题如下:
- 没有数据缓冲区,IO性能存在问题
- 没有C和C++中的Channel概念
- 同步阻塞IO,通常会导致通信线程长时间阻塞
- 支持字符集有限,硬件可移植性不好
Linux网络模型
Linux的内核将所有的外部设备看做一个文件夹操作,对于一个文件的读写都会调用内核系统命令,返回一个file description
根据Unix网络编程对IO模型分类,主要分为以下5种IO模型:
1.阻塞IO
最常用的IO模型,缺省情况下,所有文件操作都是阻塞的.
2.非阻塞IO
与阻塞IO不一样的地方是recvform从应用层到内核的时候,都会有单独的线程轮询检测EWOULDBLOCK状态来判断内核是否有数据来.
3.IO多路复用技术:select/poll
Linux所提供的select/poll中,进程将一个或多个fd传递给select或poll系统调用,阻塞到select操作上.系统