使用Socket时的阻塞工作方式和非阻塞工作方式有什么区别
2015-04-09 19:35
239 查看
阻塞模式和非阻塞模式的主要区别在于无请求来到时.
阻塞模式会一直停在接收函数即accep函数,直到有请求到来(数据到来)才会继续向下进行处理。(换句话说没有数据到达时,程序会在这行代码上等待,不继续往下执行。有数据到达后,函数返回,程序才往下执行)
而非阻塞模式下,运行接收函数,接收函数会立即返回。如果有请求,则会接收请求,如果无请求,会返回一个负值,并继续向下运行。
一般来说,使用阻塞模式的程序比较多,因为阻塞模式是由内核保障等待请求的,当他阻塞时不占用系统资源,而非阻塞模式需要我们人工轮询,占用资源较多。另外,阻塞模式可以使用select函数设置超时时间,具体可以参考相关书籍。
阻塞模式会一直停在接收函数即accep函数,直到有请求到来(数据到来)才会继续向下进行处理。(换句话说没有数据到达时,程序会在这行代码上等待,不继续往下执行。有数据到达后,函数返回,程序才往下执行)
而非阻塞模式下,运行接收函数,接收函数会立即返回。如果有请求,则会接收请求,如果无请求,会返回一个负值,并继续向下运行。
一般来说,使用阻塞模式的程序比较多,因为阻塞模式是由内核保障等待请求的,当他阻塞时不占用系统资源,而非阻塞模式需要我们人工轮询,占用资源较多。另外,阻塞模式可以使用select函数设置超时时间,具体可以参考相关书籍。
相关文章推荐
- Socket通信中服务器端发送数据使用PrintStream与OutputStream有什么区别?
- 请教:DBNULL和String.Empty和"" ,使用这三个有什么区别?
- 第2章 Java编程基础——FAQ2.22 创建String对象时, 使用String s=new String (“abc”)和String s=“abc”语句有什么区别?
- Mysql5.1中主要使用的几种表引擎?它们的区别是什么?在使用表引擎时,要注意什么问题?
- HTTP协议中POST、GET、HEAD的区别是什么?分别在什么情况下使用?
- 使用APPlication,Session,Cookie和ViewState等对象保存信息的区别是什么?
- 在共享DLL中使用MFC和在静态库中使用MFC有什么区别
- (Verilog HDL)阻塞赋值和非阻塞赋值的区别和使用
- 使用APPlication,Session,Cookie和ViewState等对象保存信息的区别是什么?
- socket阻塞和非阻塞的区别
- 转:socket阻塞和非阻塞的区别
- HTTP协议中POST、GET、HEAD的区别是什么?分别在什么情况下使用?
- DataReader与DataSet有什么区别?何时使用哪种
- 在ASP中,直接使用“Insert into” 语句与使用ADO中AddNew方法有什么区别?哪一种更好呢?
- HTTP协议中POST、GET、HEAD的区别是什么?分别在什么情况下使用?
- HTTP协议中POST、GET、HEAD的区别是什么?分别在什么情况下使用?(
- socket阻塞和非阻塞的区别
- C#下 子类继承父类的虚方法后 使用override重写父类方法 和 不使用override重写有什么区别?
- 在共享DLL中使用MFC和在静态库中使用MFC有什么区别