码迷,mamicode.com
首页 > Web开发 > 详细

Netty学习--第二章 BIO的模型详解

时间:2019-11-16 12:48:41      阅读:78      评论:0      收藏:0      [点我收藏+]

标签:单线程   同步   nbsp   来讲   需要   导致   执行   tty   结构   

一、什么是阻塞、非阻塞、同步、异步

  我们以A线程调用B线程的过程例子来讲解这四个概念

  在一个程序里,A调用B了,此时如果是

 

  同步:

  A必须等待B返回结果后,才能继续执行,但是在这期间A会一直监控B的返回状态。

 

  异步:

  A无需等待B的返回结果,当B执行完成后,会通知A来调用。

 

  阻塞:

  A一直等待B返回结果,在这期间A不能够执行后续的操作。

 

  非阻塞:

  A无需等待B的返回结果,就能够继续执行后续的操作。

 

  根据这四个的定义我们可以发现:

  同步和异步指的是通知线程任务的一种机制:同步就是A必须等待B有结果才会通知继续执行;异步是A可以先执行,当B有了结果自动通知A。

  阻塞和非阻塞指的是线程等待结果时的状态,如果阻塞是线程就不继续执行,如果非阻塞线程还可以继续执行。

二、四种IO常见的模型

  了解了上面四种模型后,我们在开发中常常会遇到的IO模型

  同步阻塞:一个任务必须做完才能继续做其他任务。

  这个就很好理解,就是我们的单线程任务。根据上面的定义我们知道这种模型性能是很差的,但编码结构一定是最简单的。

 

  异步阻塞:异步操作是可以被阻塞住的,只不过它不是在处理消息时阻塞,而是在等待消息通知时被阻塞。

  这个定义是不是非常的绕口,因为这个模型是基本不会使用的。

 

  同步非阻塞:不必关心这件事情做完没有,就去做另一件事情,但是会一直监控这件事有没有做完。

  虽然根据定义,我们会认为同时做两件事情就会很快,其实不然这种机制效率也是很低的。因为你需要一直去监控任务的结果,就会使得程序进行线程的来回切换,导致性能下降。

 

  异步非阻塞:同时做两件事情

  这个模型是在网络编程和I/O编程中用的最多,效率最高,因为你不需要去时时监控事情是否已经做完。

Netty学习--第二章 BIO的模型详解

标签:单线程   同步   nbsp   来讲   需要   导致   执行   tty   结构   

原文地址:https://www.cnblogs.com/daijiting/p/11871319.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!