vlambda博客
学习文章列表

网络io模型下的同步、异步、阻塞、非阻塞

同步阻塞:

    同步阻塞指的是用户程序通知内核需要端口port的网络数据,内核就开始监听端口port,在内核在等待并准备port数据的过程中【这个过程其实就是内核会调用系统函数打开port端口并等待网络数据从port端口输入内核的过程】,在内核准备port端口数据的过程中,用户程序也在等待【称之为阻塞】,当内核收集完从port端口传入的网络数据以后,用户程序自己将内核的数据拷贝到用户空间中【称之为同步】。

同步非阻塞:

    同步非阻塞指的是用户程序通知内核需要端口port的网络数据,内核就开始监听端口port,在内核等待并准备port端口的数据过程中,用户程序不是啥也不干等待内核准备数据,而是用户程序会在内核准备数据的过程中做其他的操作并且时不时去内核看看数据是否准备好了【这个过程叫非阻塞】,如果准备好了用户程序自己将内核数据拷贝到用户空间中【称之为同步】。

网络io模型下的同步、异步、阻塞、非阻塞

异步非阻塞:

    异步非阻塞是指用户程序通知内核需要端口port的网络数据,内核就开始监听端口port,在内核等待并准备port端口的数据过程中,用户线程可以去做其他的事情,不必等待内核准备数据【非阻塞】,当内核准备好数据了以后内核会将数据拷贝到用户空间【称之为异步】。

网络io模型下的同步、异步、阻塞、非阻塞


IO模型的分类


同步IO、异步IO,阻塞IO、非阻塞IO的区别


总结核心点

    阻塞非阻塞说的是线程的状态 

    同步和异步说的是消息的通知机制 

    同步需要主动读写数据,异步是不需要主动读写数据 

    同步IO和异步IO是针对用户应用程序和内核的交互