进程是表示资源分配的基本单位, 又是调度运行的基本单位. 例如, 用户运行自己的程序, 系统就创建一个进程, 并为它分配资源, 包括各种表格, 内存空间, 磁盘空间, I/O 设备等. 然后把该进程放人进程的就绪队列. 进程调度程序选中它, 为它分配 CPU 以及其它有关资源, 该进程才真正运行. 所以进程是系统中的并发执行的单位。

线程属于进程, 一个进程至少具有一个线程. 线程是操作系统调度的最小单位. 线程比进程更小更轻量. 线程几乎不拥有系统资源, 但是同一个进程下的线程为了能够独自运行, 依然会少量的拥有一些自己的资源, 例如线程拥有自己的程序计数器, 调用栈, 这使得线程能够相对独立的运行. 同时, 分配给每个线程的 CPU 时间相当短, 一旦结束立即挂起该线程, 切换到另一个线程. 同时由于 CPU 速度极快, 所以给人的感觉是线程在 "同步" 执行.

进程间不会因为某个进程挂掉而导致其他进程挂掉的情况, 但是进程切换的开销较大.

线程间共享同一个进程的资源, 属于同一个进程, 所以如果某个线程挂掉而没有做相应的处理, 会导致整个进程挂掉. 所以要求多线程开发的时候需要更加注意健壮性. 线程需要分配的独立资源较少, 所以线程间切换的时候开销会小于进程切换.


程序计数器

简单的理解就是一个指针, 指向当前程序机器码执行的位置. 每执行完一条命令自加, 自动指向吓一跳命令, 使得程序顺序执行. 如果有跳转那就直接指向新的位置

调用栈

主要用于存放返回地址, 同时存放本地变量, 本地参数等.

Comments
Write a Comment