网络编程-阻塞非阻塞同步异步

原创 2015年11月19日 22:20:28

这四个词语都跟线程有关,跟函数有关,跟数据就绪有关,跟主动还是被动有关

1.阻塞----------相对于函数 基于线程上下文

调用者线程调用函数时,因为条件不满足(没有数据),函数不返回,调用者线程状态进入暂停状态,

等待其它线程(也许是内核)待条件满足时通知,即激活线程进入运行状态,继续执行

有2点注意  调用者线程不干活了  调用者主动取数据

2.非阻塞----------相对于函数 基于线程上下文

调用者线程调用函数时,因为条件不满足(没有数据),函数立即返回,调用者线程继续执行,可以执行其它函数,

那啥时获取数据呢,的调用者自己决定了,一次不成功就再尝试,记得很多API 有返回值AGAIN,就是再试试。问题来了,试多少次呢,

这就的根据业务决定了,比如可以超时。

有2点注意  调用者线程继续干活,调用者主动获取数据


3.同步--------------相对于线程

同步一词在多线程编程中资源的竞争经常用到,且还经常用同步的函数,锁,信号量,条件,互斥等等。所以效率不高。

同步的目的保证了代码的串行执行。一件事一件事地做完才能做下一件事

 所以 阻塞 和非阻塞 都属于 同步范畴


4.异步 ---------相对于线程

与同步相反,我不需要同步,不需要锁与另外一个线程协调。(咱俩100米短跑比赛看看谁跑的快)

调用者只需发出请求后,可以继续干其它事,另外一个线程(也许是内核)回主动通知并把数据给你

有2点   调用者线程继续干活  调用者被动获取数据(一般在回调函数返回,数据已返回)


======================网上也有一篇讲的靠谱一点的================================

IO操作分为两个过程,第一个是内核有没有准备好数据,第二个是准备好的数据由内核空间拷贝到用户空间。


阻塞、非阻塞、IO复用都是同步的,都是第一个阶段的不同,阻塞是主动去询问内核数据有没有准备好数据,阻塞的就停止了,直到内核说有了。非阻塞的内核告诉没有,直接返回,干其他事情。IO复用也是同理,与非阻塞相比,这里的IO复用是监听多个IO操作,比如在网络编程中,用select或者epoll可以监听一组套接字,这时候哪个套接字准备好数据了,就读,没有就接着干其他的,然后等到下次循环去问。同步中,数据由内核拷贝到用户空间的过程也是需要等待的,只是操作系统处理这个过程比较快,所以我们感觉不到程序已经停下来了,其实是等待数据结束,IO操作才结束。


至于异步,是真正的非阻塞。IO操作的两个过程都没有阻塞,就是说,我在IO的过程中,只告诉内核,我是异步IO,我要读什么什么,然后我就不管了,直接去做其他事情,内核准备好数据后,然后把数据拷贝到用户空间,这两个过程完成后会给进程一个信号,告诉进程,数据都准备好了,请拿走,然后进




版权声明:本文为博主原创文章,未经博主允许不得转载。

网络编程中的阻塞,非阻塞、同步,异步概念

网络编程中的阻塞,非阻塞、同步,异步概念网络编程中,我们常常接触阻塞,非阻塞,同步,异步等概念,有些概念可能交叉使用,比如异步非阻塞,同步非阻塞,同步阻塞等等,这些概念看似相似,却往往又有着不同的概念...
  • sryan
  • sryan
  • 2016年10月11日 16:20
  • 1305

聊聊同步异步、阻塞非阻塞

1. 通用概念例子:”我”烧水(注意:这里的主语是”我”,也就是我们讨论的who)1.1. 同步异步1.1.1. 例子关注点:是否需要”我主动”去看水烧开没(注意,”我”和”主动”这两个词) 同...
  • xiaoyu966
  • xiaoyu966
  • 2016年04月22日 13:56
  • 382

阻塞/非阻塞/同步/异步详解

一、同步与异步 同步/异步, 它们是消息的通知机制 二、阻塞与非阻塞 阻塞/非阻塞, 它们是程序在等待消息(无所谓同步或者异步)时的状态. 同步 所谓同步,就是在发出一个功能调用时,在没有得到...
  • majianfei1023
  • majianfei1023
  • 2015年04月28日 12:36
  • 1588

IO中同步与异步、阻塞与非阻塞的超级通俗版解释

虽说是通俗版解释,但是在本文的开头,还是有必要先做一个极简化的介绍。 IO其实有好多种,在此仅以网络IO(相对清晰一点)来说。 我们列举这四种IO: 同步(synchronous) IO & 异...
  • arttecme
  • arttecme
  • 2013年02月04日 11:08
  • 461

【高并发编程】再谈同步、异步、阻塞、非阻塞

同步、异步、阻塞、非阻塞的概念一直是计算机学科中很重要的概念,而这种细微的差别常常被大家混淆,我自己在过一段时间后也需要复习。今天再次翻出这个概念,仍然觉得不够清晰,今天再次深入了解了这四大天王。 以...
  • xxxxxx91116
  • xxxxxx91116
  • 2016年04月24日 16:13
  • 6489

知乎上对理解阻塞非阻塞与同步异步的有趣解释

今天逛知乎的时候看到了一篇关于阻塞非阻塞和同步异步的一个有趣解释,把它copy了下来,为以后迷糊的时候看看。 老张爱喝茶,废话不说,煮开水。 出场人物:老张,水壶两把(普通水壶,简称水壶;会...
  • sky_100
  • sky_100
  • 2017年08月26日 17:16
  • 7244

小明去银行取钱了(同步异步、阻塞与非阻塞)

参考博客 nodejs里面采用了异步机制。下面对比说明同步异步机制、阻塞与非阻塞机制的区别。 好了,小明去银行取钱了。 同步:发出一个功能调用,没有得到结果时,该调用不会...
  • linxuxushiwoa
  • linxuxushiwoa
  • 2016年03月07日 21:03
  • 469

JAVA IO 同步与异步、阻塞与非阻塞

前提   首先先强调上下文:下面提到了同步与异步、阻塞与非阻塞的概念都是在IO的场合下。它们在其它场合下有着不同的含义,比如操作系统中,通信技术上。   然后借鉴下《Unix网络编程卷...
  • kalman2008
  • kalman2008
  • 2014年07月31日 18:56
  • 517

同步异步、阻塞非阻塞

简单点说: 阻塞就是干不完不准回来, 非阻塞就是你先干,我先看看有其他事没有,完了告诉我一声。 我们拿最常用的send和recv两个函数来说吧。比如你调用send函数发送一定的Byte,在系统内...
  • sooolo
  • sooolo
  • 2012年03月14日 20:05
  • 438

同步异步阻塞非阻塞

老张爱喝茶,废话不说,煮开水。 出场人物:老张,水壶两把(普通水壶,简称水壶;会响的水壶,简称响水壶)。 1 老张把水壶放到火上,立等水开。(同步阻塞) 老张觉得自己有点傻 2 老张把水壶放到...
  • kingwz66
  • kingwz66
  • 2015年09月01日 18:07
  • 66
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:网络编程-阻塞非阻塞同步异步
举报原因:
原因补充:

(最多只允许输入30个字)