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
协程不是由操作系统内核管理的,而是完全由程序所控制(也就是在用户态执行)。
线程通信的同步与异步、阻塞与非阻塞
同步与异步是针对线程一次调用得到结果的时间来分类的。
- 同步情况下,返回的结果就是调用的结果;或者说在没有得到结果之前,调用就不返回。
- 异步情况下,调用会立即返回一个空值,调用方不会直接获得真正的结果,真正的结果由被调用方来主动通知或发送给调用方。
阻塞与非阻塞是根据多线程并发的相互影响程度来分类的。
- 若一个线程是阻塞的,那么当该线程期待获得的临界区资源被其他线程占用未释放时,该线程就会调用阻塞原语将自己挂起,直到获取临界区资源才会调用唤醒原语进入就绪状态。阻塞是最严格的并发级别。
- 对非阻塞线程,当前线程对资源的使用不妨碍其他线程的继续执行。
举个例子,Java编程的三个IO模型中,BIO属于同步阻塞,NIO属于同步非阻塞,AIO属于异步非阻塞。而在线程池中处理BIO则属于异步阻塞。
同步 | 异步 | |
---|---|---|
阻塞 | BIO | 线程池 |
非阻塞 | NIO | AIO |
Comments
shortname
for Disqus. Please set it in_config.yml
.