多线程中的同步\异步、阻塞\非阻塞

一、同步与异步

    定义:同步和异步关注的是消息通信机制 (synchronous communication/ asynchronous communication)。

  • 同步,就是调用某个东西时,调用方得等待这个调用返回结果才能继续往后执行。
  • 异步,和同步相反 ,调用方不会理解得到结果,而是在调用发出后调用者可用继续执行后续操作,被调用者通过状体来通知调用者,或者通过回掉函数来处理这个调用

    比方说:你去商城买东西,你看上了一款手机,能和店家说你一个这款手机,他就去仓库拿货,你得在店里等着,不能离开,这叫做同步。现在你买手机赶时髦直接去京东下单,下单完成后你就可用做其他时间(追剧、打王者、lol)等货到了去签收就ok了.这就叫异步。

  • 同步方法调用一旦开始,调用者必须等到方法调用返回后,才能继续后续的行为。
  • 异步方法调用更像一个消息传递,一旦开始,方法调用就会立即返回,调用者就可以继续后续的操作。而,异步方法通常会在另外一个线程中,“真实”地执行着。整个过程,不会阻碍调用者的工作

同步执行
在这里插入图片描述
异步执行
在这里插入图片描述
    通过这两张图片就能很清楚的看出它们之间的区别了。

二、阻塞与非阻塞

  • 阻塞调用是指调用结果返回之前,当前线程会被挂起。调用线程只有在得到结果之后才会返回。
  • 非阻塞调用指在不能立刻得到结果之前,该调用不会阻塞当前线程。 对于同步调用来说,很多时候当前线程还是激活的状态,只是从逻辑上当前函数没有返回而已,即同步等待时什么都不干,白白占用着资源。

三、两类别之间的区别

    阻塞和非阻塞 强调的是程序在等待调用结果(消息,返回值)时的状态. 。

    同步和异步强调的是消息通信机制 (synchronous communication/ asynchronous communication)。

发布了25 篇原创文章 · 获赞 7 · 访问量 2131

猜你喜欢

转载自blog.csdn.net/qq_41506111/article/details/102837948