同步/异步 阻塞/非阻塞 .

  • 时间:
  • 浏览:0

同步和异步:上端提到过,同步和异步仅仅是关于所关注的消息何如通知的机制,而算是处理消息的机制.也假如说,同步的情况汇报下,是由处理消息者个人去守候消息算是被触发,而异步的情况汇报下是由触发机制来通知处理消息者,好多好多 有在异步机制中,处理消息者和触发机制之间就必须2个连接的桥梁,在亲们举的例子中这个 桥梁假如小纸条上端的号码,而在select/poll等IO多路复用机制中假如fd,当消息被触发时,触发机制通过fd找到处理该fd的处理函数.

举个例子,比如我去银行办理业务,肯能选折 排队守候,也肯能取2个小纸条上端有我的号码,等到排到我这个 号时由柜台的人通知我轮到我去办理业务了.

这两组概念常常你不能迷惑,肯能它们算是涉及到IO处理,共同又有着或多或少相之类的地方.

请注意理解消息通知和处理消息这个 个概念,这是理解这个 难题的关键所在.还是回到上端的例子,轮到你办理业务这个 就你都这麼关注的消息,而去办理业务假如对这个 消息的处理,两者是有区别的.而在真实的IO操作时,所关注的消息假如该fd算是可读写,而对消息的处理假如对这个 fd进行读写.同步/异步仅仅关注的是何如通知消息,它们对何如处理消息何必 关心,好比说,银行的人仅仅通知你轮到你办理业务了,而何如办理业务亲们是我不知道的.

而好多好多 他们难能可贵把同步和阻塞混淆,我想也是肯能这麼区分这个 个概念,比如阻塞的read/write操作中,其实是把消息通知和处理消息结合在了共同,在这里所关注的消息假如fd算是可读/写,而处理消息则是对fd读/写.当亲们将这个 fd设置为非阻塞的事先,read/write操作就不要 再在守候消息通知这里阻塞,肯能fd不可读/写则操作立即返回.

好多好多 他们会把同步和阻塞混淆,我想是肯能好多好多 有事先同步操作会以阻塞的形式表现出来,比如好多好多 他们会写阻塞的read/write操作,有已经 别忘了不能对fd设置O_NONBLOCK标志位,2个就不能将同步操作变成非阻塞的了;同样的,好多好多 他们也会把异步和非阻塞混淆,肯能异步操作一般算是会在真正的IO操作处被阻塞,比如肯能用select函数,当select返回可读时再去read一般算是会被阻塞,就好比当你的号码排到时一般算是在你事先肯能这麼人了,好多好多 有你再去柜台办理业务就不要 再被阻塞.

可见,同步/异步与阻塞/非阻塞是两组不同的概念,它们不能共存组合,不要 再能参见这里:

----------------------------------------- 分割线 ------------------------------------------------------

好多好多 他们又会问了,异步操作不要 再是阻塞的吧?肯能通知了有消息不能处理了就一定算是阻塞的了吧?

首先来解释同步和异步的概念,这个 个概念与消息的通知机制有关.

其次再来解释一下阻塞和非阻塞,这个 个概念与应用进程守候消息(无所谓同步肯能异步)时的情况汇报有关.