Cgroup 资源配置方法
一、进程和线程
1.进程
-
开发写的代码我们称为程序,那么将开发的代码运行起来。我们称为进程。
-
明白点: 当我们运行一个程序,那么我们将运行的程序叫进程。
-
进程是申请一块内存空间,将数据放到内存空间中去, 是申请数据的过程是最小的资源管理单元
-
进程是线程的容器
程序与进程的区别
- 程序是数据和指令的集合, 是一个静态的概念, 就是一堆代码, 可以长时间的保存在系统中
- 进程是程序运行的过程, 是一个动态的概念, 进程存在着生命周期, 也就是说进程会随着程序的终止而销毁, 不会永久存在系统中
进程之间交互
- 进程之间通过 TCP/IP 端口实现
2.线程
什么是线程
- 线程是操作系统能够进行运算调度的最小单位。
- 它被包含在进程之中,是进程中的实际运作单位。
- 一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务。
- 是进程的一条流水线, 只用来执行程序,而不涉及到申请资源, 是程序的实际执行者最小的执行单元
线程之间交互
- 多个线程共享同一块内存,通过共享的内存空间来进行交互
3.进程与线程的关系
进程是线程的容器
例子:
- 我们打开一个聊天软件,这就是开启了一个进程;当我们在软件里面打开一些功能,比如空间, 扫一扫, 设置…,这些操作就是线程;所以可以说 “进程” 包含 “线程”, “线程” 是 “进程” 的子集
工厂流水线例子:
4.总结
- 进程:指在系统中正在运行的一个应用程序;程序一旦运行就是进程;进程——资源分配的最小单位。
- 线程:系统分配处理器时间资源的基本单元,或者说进程之内独立执行的一个单元执行流。线程——程序执行的最小单位。
- 进程要分配一大部分的内存,而线程只需要分配一部分栈就可以了.
- 一个程序至少有一个进程,一个进程至少有一个线程.
- 一个线程可以创建和撤销另一个线程,同一个进程中的多个线程之间可以并发执行.
二、Cgroup 资源配置方法
2.1 Cgroup概述
Docker通过 Cgroup 来控制容器使用的资源配额,包括 CPU、内存、磁盘三大方面, 基本覆盖了常见的资源配额和使用量控制。
- Cgroup 是 Control Groups 的缩写,是Linux 内核提供的一种可以限制、记录、隔离进程组所使用的物理资源(如 CPU、内存、磁盘 IO 等等)的机制,被 LXC、docker 等很多项目用于实现进程资源控制。
- Cgroup 本身是提供将进程进行分组化管理的功能和接口的基础结构,I/O 或内存的分配控制等具体的资源管理是通过该功能来实现的。
这些具体的资源 管理功能称为 Cgroup 子系统,有以下几大子系统实现:
子系统 | 功能 |
---|---|
blkio | 设置限制每个块设备的输入输出控制。例如:磁盘,光盘以及 usb 等等 |
CPU | 使用调度程序为 cgroup 任务提供 CPU 的访问 |
cpuacct | 产生 cgroup 任务的 CPU 资源报告 |
cpuset | 如果是多核心的 CPU,这个子系统会为 cgroup 任务分配单独的 CPU 和 内存 |
devices | 允许或拒绝 cgroup 任务对设备的访问 |