# 进程 线程 协程
# 简介
程序【可执行文件】
# 进程
进程调度子进程是全部 fork 进程是系统中资源分配和运行调度的单位,在对资源共享和竞争中,进程间会相互制约。 从结构上讲,每一个进程都由程序、数据和一个进程控制块组成。 是一个具有一定独立功能的程序关于某个数据集合的一次运行活动,是系统进行资源分配和调度运行的基本单位。
- 进程是操作系统对一个正在运行的程序的一种抽象结构
- 进程是指在操作系统中能独立运行并作为资源分配的基本单位,由一组机器指令、数据和堆栈等组成的能独立运行的活动实体。
- 操作系统可以同时运行多个进程,多个进程直接可以并发执行的交换信息。
- 进程的运行需要一定的资源,如:CPU、存储空间和 I/O 设备等
进程最基本的特征是并发和共享
// ``ps aux`` 查看全部进程【root用户】
USER 谁发起的
PID 识别进程身份的唯一ID
# 线程
在一个程序里的一个执行路线叫线程(thread),更准确的定义是:线程是“一个进程内部的控制序列”。一切进程至少都有一个线程。 在单个程序中同时运行多个线程完成不同的工作,称为多线程。
- 线程比进程更轻量
- 线程能独立运行,独立调度,拥有资源(一般是 CPU 资源,程序计数器等)
- 线程调度能大幅度减小调度成本(相对进程来说),线程的切换不会引起进程的切换
- 线程的引入进一步提高操作系统的并发性,线程能并发执行
- 同一个进程的多个线程共享进程资源(省去了资源调度现场保护的很多工作)
共享资源
# 多线程的三个概念
- 原子性 【要么都执行,要么都不执行】
- 可见性 【当多个线程并发访问共享变量时,一个线程对共享变量修改,其他线程能够立即看到。】
- 有序性 【程序执行的顺序按照代码的先后顺序执行】
# 线程安全
当多线程访问时,为避免多个线程先后更改数据造成脏数据,加入线程所的机制。
进程调度可以很好的控制资源分配 线程调度让进程内部不因某个操作而整体阻塞 协程则是在用户太来优化程序,让程序员以写同步代码的方式写出异步代码般的效率
# 协程
单核 协程就是用户态的轻量级线程【用户态线程-由程序员调度的线程】
- 协程是用户模式下轻量级线程,操作系统内核对协程一无所知
- 协程的调度完全由应用程序控制,操作系统不管这部分的调度
- 一个线程可以包含一个或多个协程
- 协程能保留上一次调用时的状态
- windows 下的实现叫纤程
# IO 密集型 CPU 密集型
# IO 密集型 Input/Output
多进程->多线程->事件驱动->协程
读写硬盘
网络
服务器
除 cpu、内存打交道,都是 I/O
# CPU 密集型
多进程->多线程
需要大量的预算
# 进程与线程的资源共享
-------------
操作系统
-------
|进程1 | 进程2
| | | |
| 线程 | 线程
-------
# 单线程进程
代码 数据 文件 寄存器 栈 线程
# 多线程进程
代码 数据 文件
寄存器 寄存器 寄存器
栈 栈 栈
线程 线程 线程
栈 -> 数据结构
# 进程管理的相关命令
- top
- ps
- kill
- w 【当前登录服务器的用户】
# 网络管理的相关命令
- tracerout www.baidu.com
- 查看从本机到百度的路由
- *** 表示不能 ping
- ss -an -p | grep 80