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

原创 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,我要读什么什么,然后我就不管了,直接去做其他事情,内核准备好数据后,然后把数据拷贝到用户空间,这两个过程完成后会给进程一个信号,告诉进程,数据都准备好了,请拿走,然后进




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

【Linux网络编程】同步,异步,阻塞,非阻塞

同步(synchronous) IO和异步(asynchronous) IO,阻塞(blocking) IO和非阻塞(non-blocking)IO分别是什么,到底有什么区别?这个问题其实不同的人给出...

UNIX网络编程--socket中的同步/异步 阻塞/非阻塞

1. 概念理解      在进行网络编程时,我们常常见到同步(Sync)/异步(Async),阻塞(Block)/非阻塞(Unblock)四种调用方式: 同步:       所谓同步,就是在发出一...

【UNIX网络编程】五种I/O模型,阻塞非阻塞同步异步问题详解

IO复用  在写简单的TCP/IP服务器-客户端程序时,客户端要同时处理两个输入:   标准输入 TCP套接字  在结束的时候,因为客户端正阻塞于标准输入上的read函数,服务器TCP虽然正确的给客户...

网络编程之同步,阻塞,异步,非阻塞

同步:函数没有执行完不返回,线程被挂起 阻塞:没有收完数据函数不返回,线程也被挂起 异步:函数立即返回,通过事件或是信号通知调用者 非阻塞:函数立即返回,通过select通知调用者 ...
  • itianyi
  • itianyi
  • 2013年06月18日 17:19
  • 867

网络编程之 Socket的模式(一) --- “阻塞/非阻塞” 与 “同步/异步”

1.  阻塞/非阻塞         对于网络编程而言,Socket模式是开发者必须明确的一个问题。对于Socket的操作,可以分为阻塞模式和非阻塞模式两种。在两种不同模式下,同一个Socket函数的...
  • arau_sh
  • arau_sh
  • 2013年10月17日 12:11
  • 2106

网络编程之同步,阻塞,异步,非阻塞

同步:函数没有执行完不返回,线程被挂起 阻塞:没有收完数据函数不返回,线程也被挂起 异步:函数立即返回,通过事件或是信号通知调用者 非阻塞:函数立即返回,通过select通知调用者 这样看来...

Unix网络编程之同步/异步/阻塞/非阻塞

Unix网络编程之同步/异步/阻塞/非阻塞

Android 网络编程之同步,异步,阻塞和非阻塞

网络编程之同步,阻塞,异步,非阻塞 同步:函数没有执行完不返回,线程被挂起;   阻塞:没有收完数据函数不返回,线程也被挂起;  异步:函数立即返回,通过事件或是信号通知调用...

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

关于网络编程中的异步、同步、阻塞、非阻塞的理解 1、异步和同步为一组对应概念。(我们讨论同步异步,都特指那些需要其他部件协作或者需要一定时间完成的任务,因为很快完成的任务无所谓同步和异步) ...

网络编程中阻塞与非阻塞,同步与异步、I/O模型的理解

1. 概念理解      在进行网络编程时,我们常常见到同步(Sync)/异步(Async),阻塞(Block)/非阻塞(Unblock)四种调用方式: 同步:       所谓同步,就是在发...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:网络编程-阻塞非阻塞同步异步
举报原因:
原因补充:

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