---
title: "同步和异步&阻塞和非阻塞"
author: "Perrin Yong"
author_profile: https://www.pystone.net/profile/
published_by: "Perrin Yong"
canonical: https://www.pystone.net/notes/sync-async-blocking-nonblocking/
type: note
content_role: unspecified
visibility: public
id_stability: rename-stable
source_path: "10-计算机、信息技术与工程/01-系统基础与网络安全/计算机与操作系统/同步和异步&阻塞和非阻塞.md"
content_hash: 2a78b76c9444702b428d5ef4d485222852e2efa8e1c742eacfd1326451ab6b41
knowledge_version: 224c990773de.5fa8af6e39fa
site_commit: 224c990773de166d23a886306577dd90379529ce
notes_commit: 5fa8af6e39fa3891d1b9b4832bfa6c4e0ecaaf0a
---
# 同步和异步&阻塞和非阻塞

﻿# 同步和异步&阻塞和非阻塞

> 创建时间：2020/6/17 21:05

## 同步和异步

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

### 同步（Synchronous）

同步，就是在发出一个 _调用_ 时，在没有得到结果之前，该 _调用_ 就不返回。但是一旦调用返回，就得到返回值了。换句话说，就是由 _调用者_ 主动等待这个 _调用_ 的结果。

> 同步是指：当程序1调用程序2时，程序1停下不动，直到程序2完成回到程序1来，程序1才继续执行下去。

> 同步是指：发送方发出数据后，等接收方发回响应以后才发下一个数据包的通讯方式。

### 异步（Asynchronous）

_调用_ 在发出之后，方法调用就会立即返回，调用者就可以继续后续的操作。换句话说，当一个异步过程调用发出后，调用者不会立刻得到结果。而是在 _调用_ 发出后， _被调用者_ 通过状态、通知来通知调用者，或通过回调函数处理这个调用。

> 异步是指：当程序1调用程序2时，程序1径自继续自己的下一个动作，不受程序2的的影响。

> 异步是指：发送方发出数据后，不等接收方发回响应，接着发送下个数据包的通讯方式。

### 如何选择

就是看需要的请求的数据是否是程序继续执行必须依赖的数据
优缺点：

  1. 同步的执行效率会比较低，耗费时间，但有利于我们对流程进行控制，避免很多不可掌控的意外情况；
  2. 异步的执行效率高，节省时间，但是会占用更多的资源，也不利于我们对进程进行控制

## 阻塞和非阻塞

阻塞和非阻塞关注的是程序在等待调用结果（消息，返回值）时的状态.

### 阻塞

阻塞调用是指调用结果返回之前，当前线程会被挂起。调用线程只有在得到结果之后才会返回。

### 非阻塞

非阻塞调用指在不能立刻得到结果之前，该调用不会阻塞当前线程。
