常用的IO模型

							常用的IO模型

1、 消息通信机制大致分为:同步、异步。

  1. 同步:调用一个功能,在功能结果没有返回之前,一直等待结果返回。
  2. 异步:调用一个功能,调用立刻返回,但调用者不能立刻得到结果。调用者可以继续后续的操作,其结果一般通过状态,回调函数来通知调用者。
    2、 等待调用结果时的状态分为:阻塞、非阻塞。
  3. 阻塞:调用一个函数,当调用结果返回之前,当前线程会被挂起,只有得到结果之后才会返回。
  4. 非阻塞:调用一个函数,不能立刻得到结果之前,调用不能阻塞当前线程。
    3、 一个输入操作通常包括两个阶段:等待数据准备好、从内核向进程复制数据
    对于一个套接字上的输入操作,第一步通常涉及等待数据从网络中到达。当所等待数据到达时,它被复制到内核中的某个缓冲区。第二步就是把数据从内核缓冲区复制到应用进程缓冲区。
    4、 阻塞 IO 模型:
    应用进程被阻塞,直到数据从内核缓冲区复制到应用进程缓冲区中才返回。
    5、 非阻塞IO模型:
    进程发起 IO 系统调用后,内核返回一个错误码而不会被阻塞;应用进程可以继续执行,但是需要不断的执行系统调用来获知 I/O 是否完成。如果内核缓冲区有数据,内核就会把数据返回进程。
    6、 IO 复用模型:
    使用 select 或者 poll 等待数据,可以等待多个套接字中的任何一个变为可读。这一过程会被阻塞,当某一个套接字可读时返回,之后把数据从内核复制到进程中。
    注:在多路复用 IO 模型中,会有一个线程不断去轮询多个 socket 的状态,只有当 socket 真正有读写事件时,才真正调用实际的 IO 读写操作。在多路复用 IO 模型中,一个线程就可以管理多个 socket,只有在真正有 socket 读写事件进行时,才会使用 IO 资源,所以它大大减少了资源占用。
    7、 信号驱动 IO 模型:
    当进程发起一个 IO 操作,会向内核注册一个信号处理函数,然后进程返回不阻塞;当内核数据就绪时会发送一个信号给进程,进程便在信号处理函数中调用 IO 读取数据。
    8、 异步 IO 模型:
    当进程发起一个 IO 操作,进程返回不阻塞,但也不能返回结果;内核把整个 IO 处理完后,会通知进程结果。如果IO操作成功则进程直接获取到数据。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值