标签:
在进行网络编程时,我们通常会看到同步、异步、阻塞、非阻塞四种调用方式以及他们的组合。
了解同步、异步看这里:同步、异步有什么区别
其中阻塞方式、 非阻塞方式主要是针对服务端(server)的,具体如下:
阻塞(Block)
阻塞调用是指调用结果返回之前,当前线程会被挂起。挂起即线程进入非可执行状态,在这个状态下,cpu不会给线程分配时间片,即线程暂停运行。
了解线程的状态看这里:线程的状态有哪些
阻塞调用会让线程一直进行等待,当调用没有执行完就有另一次请求,这是会开启一个新的线程来执行,会占用更多的线程资源。
由于阻塞线程的大部分时间都浪费在等待请求上了,所以并不能处理过多的请求。
非阻塞(Unblock)
非阻塞是相对阻塞来说的,是指调用不会阻塞当前线程,而会立刻返回。
非阻塞是通过轮询不断去询问数据是否准备好了,如果准备好了主动获取数据。在这期间线程没有挂起。
非阻塞处理连接的线程数和请求数没有联系,也就是说很多个请求可以通过相对较少的线程进行处理。
总结来说, 阻塞和非阻塞的区别:请求发出后,没有数据到达时,是否立刻返回。
Java千百问_01基本概念(015)_阻塞、非阻塞有什么区别
标签:
原文地址:http://blog.csdn.net/ooppookid/article/details/51761325