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

  • 时间:
  • 浏览:0

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

而全都人固然把同步和阻塞混淆,我想也是不可能 没人区分这有五个 多概念,比如阻塞的read/write操作中,我我虽然是把消息通知和外理消息结合在了共同,在这里所关注的消息而且fd是否是可读/写,而外理消息则是对fd读/写.当亲戚大伙儿将这种fd设置为非阻塞的以后 ,read/write操作就不必等待英文英文消息通知这里阻塞,不可能 fd不可读/写则操作立即返回.

其次再来解释一下阻塞和非阻塞,这有五个 多概念与多多线程 等待英文消息(无所谓同步不可能 异步)时的情形有关.

举个例子,比如我去银行办理业务,不可能 选取排队等待英文英文,而且可能 取有五个 多小纸条里边有我的号码,等到排到我这种号时由柜台的人通知我轮到我去办理业务了.

请注意理解消息通知和外理消息这有五个 多概念,这是理解这种什么的间题的关键所在.还是回到里边的例子,轮到你办理业务这种需要你在关注的消息,而去办理业务而且对这种消息的外理,两者是有区别的.而在真实的IO操作时,所关注的消息而且该fd是否是可读写,而对消息的外理而且对这种fd进行读写.同步/异步仅仅关注的是怎么都可以通知消息,它们对怎么都可以外理消息固然关心,好比说,银行的人仅仅通知你轮到你办理业务了,而怎么都可以办理业务亲戚大伙儿是问你的.

全都人会把同步和阻塞混淆,我想是不可能 全都以后 同步操作会以阻塞的形式表现出来,比如全都人会写阻塞的read/write操作,而且 别忘了还可不都都可以对fd设置O_NONBLOCK标志位,从前就还可不都都可以将同步操作变成非阻塞的了;同样的,全都人也会把异步和非阻塞混淆,不可能 异步操作一般需要会在真正的IO操作处被阻塞,比如不可能 用select函数,当select返回可读时再去read一般需要会被阻塞,就好比当你的号码排到时一般需要在你以后 不可能 没人人了,全都你再去柜台办理业务就不必被阻塞.

同步和异步:里边提到过,同步和异步仅仅是关于所关注的消息怎么都可以通知的机制,而需要外理消息的机制.也而且说,同步的情形下,是由外理消息者当事人去等待英文消息是否是被触发,而异步的情形下是由触发机制来通知外理消息者,全都在异步机制中,外理消息者和触发机制之间就需要有五个 多连接的桥梁,在亲戚大伙儿举的例子中这种桥梁而且小纸条里边的号码,而在select/poll等IO多路复用机制中而且fd,当消息被触发时,触发机制通过fd找到外理该fd的外理函数.

这两组概念常常我就迷惑,不可能 它们需要涉及到IO外理,共同又有着这种相相似的地方.

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

全都人又会问了,异步操作不必是阻塞的吧?不可能 通知了有消息还可不都都可以外理了就一定需要阻塞的了吧?

可见,同步/异步与阻塞/非阻塞是两组不同的概念,它们还可不都都可以共存组合,也还可不都都可以参见这里: