Process, Thread and Coroutine

Processes, threads and coroutines, are common and important concepts in OS and programming learning.

Explanation from OS perspective

进程是操作系统资源分配的基本单位。保存在外存的程序运行起来的时候,操作系统会在内存空间内形成一个独立的内存体,这个内存体有自己独立的地址空间。即操作系统会以进程为单位分配系统资源(CPU时间片、内存等资源),进程是资源分配的最小单位,是操作系统进行资源分配和调度的一个独立单位。

A thread is the real unit running on a CPU whose execution is scheduled by the OS. One process contains at least one thread. One or more threads inside a process share their common resources while executing individually.

Composition of a process

进程一般由程序、数据和进程控制块(PCB)三部分组成。

如何通俗地理解进程和线程的关系?

Coroutine

协程不是由操作系统内核管理的,而是完全由程序所控制(也就是在用户态执行)。

线程通信的同步与异步、阻塞与非阻塞

同步与异步是针对线程一次调用得到结果的时间来分类的。

  1. 同步情况下,返回的结果就是调用的结果;或者说在没有得到结果之前,调用就不返回。
  2. 异步情况下,调用会立即返回一个空值,调用方不会直接获得真正的结果,真正的结果由被调用方来主动通知或发送给调用方。

阻塞与非阻塞是根据多线程并发的相互影响程度来分类的。

  1. 若一个线程是阻塞的,那么当该线程期待获得的临界区资源被其他线程占用未释放时,该线程就会调用阻塞原语将自己挂起,直到获取临界区资源才会调用唤醒原语进入就绪状态。阻塞是最严格的并发级别。
  2. 对非阻塞线程,当前线程对资源的使用不妨碍其他线程的继续执行。

举个例子,Java编程的三个IO模型中,BIO属于同步阻塞,NIO属于同步非阻塞,AIO属于异步非阻塞。而在线程池中处理BIO则属于异步阻塞。

同步 异步
阻塞 BIO 线程池
非阻塞 NIO AIO
服务型合约引擎构建指南 通过案例学习OriginPro绘图

Comments

You forgot to set the shortname for Disqus. Please set it in _config.yml.
Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×