I/O的模型
首先要声明的一点一定要把同步/异步 阻塞/非阻塞 以及I/O这三者的概念区别开来,同步大部分是阻塞
的,异步大部分是非阻塞的,但是它们之间并没有必然的因果关系
同步与异步
两者产生需要有个前提——是否有多个任务或事件发生,只有满足了这一前提,才有了同步和异步的概念
同步:如果有多个任务或者事件要发生,这些任务或者事件必须逐个地进行,一个事件或者任务
的执行会导致整个流程的暂时等待,这些事件没有办法并发地执行
异步:如果有多个任务或者事件发生,这些事件可以并发地执行,一个事件或者任务的执行不会
导致整个流程的暂时等待
再扩展一点,所谓同步,就是在发出一个功能调用时,在没有得到结果之前,该调用就不返回。按照这个定义,
其实绝大多数函数都是同步调用。但是一般而言,我们在说同步、异步的时候,特指那些需要其他部件协作或
者需要一定时间完成的任务
举个例子,小明他妈(调用方)派小明(被调用方)去车站迎接客人,小明一直在车站等到客人到达,把客人
带回家,交给他妈,这就是同步调用。
小明嫌在车站等着无聊,改为每隔五分钟就出去看一次,立即回来告诉他妈客人到没到,这就是异步调用
阻塞和非阻塞
这两个概念的前提条件是某个事件或者任务在执行
阻塞:当某个事件或者任务在执行过程中,它发出一个请求操作,但是由于该请求操作需要的条件
不满足,那么就会一直在那等待,直至条件满足
非阻塞:当某个事件或者任务在执行过程中,它发出一个请求操作,如果该请求操作需要的条件不
满足,会立即返回一个标志信息告知条件不满足,不会一直在那等待
因此同步/异步和阻塞/非阻塞没有必联的关系,至于为什么有时候会感觉两者有联系呢?是因为java中为
了使