异步同步与阻塞非阻塞 及java IO、java newIO、java AIO之间的关系

异步同步在不同的场合有不同的含义,我们经常被这些感念弄混淆。

同步异步一定有双方以上,阻塞非阻塞肯定是线程进程自己的行为。

一、在操作系统中

  • 阻塞状态是指正在执行的进程由于发生某事情而暂时无法继续执行时,便放弃处理机而处于暂停状态。
  • 进程具有异步性,指:进程各自独立,不可预知的速度向前推进,或者说进程实体按异步的方式运行。正式由于有异步性,可以要同步。
  • 进程同步:对多个相关进程在执行次序上进行协调,以使并发执行的进程之间能有效共享资源和互相合作,从而使程序的执行具有可再现性。
这里讲的同步异步需在在 多个进程之间,是 讲进程推进的方式。异步就是进程之间没有关系,互不干扰。同步就是进程有关系,有干扰关系的。

二、通信技术上

有两种基本的技术,一种是:RPC技术,另一种是:消息通信。RPC是同步的,消息通信是天然异步的。这里的同步异步,是讲调用方是否感知到被调用方调用成功了并调用方能否得到反馈。意思就是 我有一个状态A,我要通知你,同步就是一段时间后你必须也是状态A。异步就是可能不是。
当然,消息通信也能实现 同步的要求。

这里讲的同步异步, 是指调用方的状态 如何 共享到被调用方。

三、IO
  • 就是用户线程与内核之间怎么通信了。阻塞是讲用户线程的状态,同步异步是讲 用户线程是主动 查看内核的事件,还是内核通知用户线程。
  • 有 同步阻塞,同步非阻塞,异步阻塞,异步非阻塞。
  • 同步和异步仅仅是关于所关注的消息如何通知的机制,而不是处理消息的机制。
同步大多是阻塞的,但是也有非阻塞。因为线程可以干别的事情,不一定一直等待,可以轮询。
异步大多为非阻塞的,但是也可以阻塞。因为线程可以不干别的事情,一直在等待 触发机器来通知。

你可能感兴趣的:(java,IO)