阻塞,非阻塞,同步,异步

来源:互联网 发布:db2 删除数据库 编辑:程序博客网 时间:2024/05/28 23:09

阻塞和非阻塞:

阻塞:比如app程序调用read(fd,buff,count),而描述符fd设置的是阻塞的,那么如果数据没有准备好(比如在读取socket描述符中的数据的时候,数据还没有到达),系统会把app程序挂起,这也就是进入了阻塞模式,直到数据准备好,read函数才返回。

非阻塞:对于上面的例子,app调用read(fd,buff,count),描述符fd设置的是非阻塞的,也就是fd设置了O_NONBLOCK标志,不管数据有没有准备好,read函数都会立即返回,只是返回结果会不一样。

同步和异步:

同步:同步可以想成app只有一个进程(实际上可能不仅仅只有一个线程,但是为了某种目的,需要加锁等一些同步操作,可以看做是一个进程),也只有一个线程,所有的步骤都只能排好队,按照这一条线来处理。

异步:就好像我的app是多线程程序,可以多条线同时进行。


非阻塞异步与非阻塞同步比较:因为都是非阻塞,所以app程序调用read函数的时候,都立即返回。但是我们的程序的目的是用read函数得到数据,那么对于非阻塞异步的程序,因为我还有其他线程或者进程,那么可以去处理其他的事情(这些事情是指那些不需要read函数返回的数据的事情)。但是对于非阻塞同步的程序,因为只有一条线,所以为了得到read函数的数据,那么需要循环不断的去查看是否得到了数据,这样是非常浪费CPU的。

0 0
原创粉丝点击