“同步与异步、阻塞与非阻塞”的版本间的差异

来自姬鸿昌的知识库
跳到导航 跳到搜索
(建立内容为“1”的新页面)
 
第1行: 第1行:
1
+
在 IO 体系中,经常能接触到同步阻塞、异步非阻塞等概念,往往使人疑惑,在多线程环境下,多线程不就是非阻塞的,单线程就是阻塞的吗?
 +
 
 +
多线程不就是异步,单线程不就是同步吗?
 +
 
 +
这种普遍的疑惑,事实上是由于概念的不清晰造成的。
 +
 
 +
 
 +
 
 +
多线程、单线程、同步、异步、阻塞、非阻塞,都是独立的概念,只是在多数应用场景下,它们看上去一致,所以造成了概念的混淆。
 +
 
 +
 
 +
=== 在多线程语境下的概念 ===
 +
在多线程语境下,用于描述任务的线程访问执行机制,同步和异步关注的是任务是否可以同时被调用,阻塞和非阻塞则关注的是线程的状态。
 +
 
 +
# 同步:指代码的同步执行(Synchronous Invoke),一个执行块同一时间只有一个线程可以访问;
 +
# 异步:指代码的异步执行(Asynchronous Invoke),多个执行块可以同时被多个线程访问;
 +
# 阻塞:线程阻塞状态(Thread Block),表示线程挂起;
 +
# 非阻塞:线程不处于阻塞状态,表示线程没有挂起;
 +
 
 +
 
 +
 
 +
=== 在 IO 语境下的概念 ===

2023年5月8日 (一) 02:10的版本

在 IO 体系中,经常能接触到同步阻塞、异步非阻塞等概念,往往使人疑惑,在多线程环境下,多线程不就是非阻塞的,单线程就是阻塞的吗?

多线程不就是异步,单线程不就是同步吗?

这种普遍的疑惑,事实上是由于概念的不清晰造成的。


多线程、单线程、同步、异步、阻塞、非阻塞,都是独立的概念,只是在多数应用场景下,它们看上去一致,所以造成了概念的混淆。


在多线程语境下的概念

在多线程语境下,用于描述任务的线程访问执行机制,同步和异步关注的是任务是否可以同时被调用,阻塞和非阻塞则关注的是线程的状态。

  1. 同步:指代码的同步执行(Synchronous Invoke),一个执行块同一时间只有一个线程可以访问;
  2. 异步:指代码的异步执行(Asynchronous Invoke),多个执行块可以同时被多个线程访问;
  3. 阻塞:线程阻塞状态(Thread Block),表示线程挂起;
  4. 非阻塞:线程不处于阻塞状态,表示线程没有挂起;


在 IO 语境下的概念