阻塞IO:
    就是等待数据的时候会直接进入等待状态,进程和线程就会被挂起,优点是占用cpu资源少
    缺点在高并发情况下是上下文切换比较大
    image.jpeg
    非阻塞IO:
    等待数据的时候不会将进程或者线程挂起,会直接返回,然后不断的轮训数据是否准备好
    优点是不用阻塞等待,实时性比阻塞IO好一点,缺点是会浪费比较多的cpu资源
    IO多路复用:
    普通的阻塞IO和非阻塞IO都是一个socket分配一个线程,而在一些连接比较多的情况下其实很多连接都是处于空闲状态的,因为cpu的核心数只有这么多,如果有大量的线程存在的话会带来大量的上下文切换,所以我们就可以使用IO多路复用的技术来让一个线程管理多个socket连接,来减少上下文切换带来的消耗
    缺点:当连接数少的时候没必要,因为单个处理就要2次系统调用
    信号驱动IO:
    给socket指定一个宿主进程,当socket有事件发生时就会给进程发送一个信号让他把数据从内核态拷贝到用户态进行处理,对于UDP来说有用,对于TCP来说用处不大,因为导致这种通知的条件为数众多,每一个来进行判别会消耗很大资源
    异步IO(不支持PageCache):
    就是告诉内核启动某个操作然后内核比如将数据从内核缓冲区拷贝到应用程序的缓冲区的时候通知应用程序优点是:能够很大程度上让IO操作和计算重叠,缺点是这种io要让操作系统完成大量的操作,linux的aio现在还不完善2.6
    image.jpeg