# 进程 线程 协程

# 简介

程序【可执行文件】

# 进程

进程调度子进程是全部 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