了解一点Docker

参考:https://liaoxuefeng.com/blogs/all/2022-05-24-docker/index.html


文章目录

扫盲:什么是进程和线程?

一、进程(Process)和线程(Thread)的关系

进程 线程
定义 操作系统资源分配的最小单位 CPU调度执行的最小单位
拥有什么 独立的地址空间、文件句柄、代码段、数据段 只拥有少量私有资源(寄存器、栈),共享进程资源
切换开销 大(需要切换页表、刷新TLB) 小(只需保存寄存器和栈)
通信方式 IPC(管道、消息队列、共享内存等) 直接读写共享内存(需同步机制)

关系:一个进程可以包含多个线程,这些线程共享该进程的地址空间和资源。

复制代码
进程A
├── 线程A-1(主线程)
├── 线程A-2
└── 线程A-3
    ↑ 共享A的内存、打开的文件等

进程B(完全隔离,无法直接访问A的内存)
└── 线程B-1

二、top/htop 中每一行是进程还是线程?

默认显示的是进程,但:

工具 说明
top 默认只显示进程;按 H 切换显示所有线程,此时每行是一个线程,PID列实际显示的是 TID(线程ID)
htop 按 t 或 F5(树形视图)可以看到线程;设置 → 显示线程选项可切换

验证方法:

bash 复制代码
# 查看某进程的所有线程
ps -T -p <PID>        # 显示线程(SPID = TID)
cat /proc/<PID>/task/  # 目录下每个数字就是一个线程ID

三、"16核32线程"是什么意思?

这是 CPU硬件层面的超线程(Hyper-Threading / SMT)技术 ,和操作系统"线程"是不同层次的概念:

层级 含义
物理核心(Core) 真正的独立计算单元,16个
逻辑处理器(线程) 每个物理核心通过超线程技术,模拟出2个逻辑核心,共32个

超线程原理 :一个物理核心内部有两套独立的寄存器、程序计数器,共享执行单元(ALU、缓存等)。当一套上下文等待内存时,另一套可以接着用执行单元,提高利用率。

复制代码
物理核心 #1
├── 逻辑处理器 #1  ← 操作系统看到的"CPU0"
└── 逻辑处理器 #2  ← 操作系统看到的"CPU1"
    ↑ 共享同一个物理核心的执行资源

操作系统把这32个逻辑处理器都当作"CPU"来调度线程

性能 :32线程 ≠ 32核,通常提升 20-30% 而非翻倍。


四、三层"线程"别混淆

层级 例子 作用
CPU硬件线程 超线程/SMT 提高物理核心利用率
操作系统线程 pthread_create、Java Thread 程序并发执行的单位
用户态线程/协程 Go goroutine、Python asyncio 更轻量,由运行时调度

我们写的代码创建的是操作系统线程 ,被调度到硬件逻辑处理器上执行。

了解进程之后再看docker原理

Docker/容器:容器是一种对进程进行隔离的运行环境

  • 进程是Linux操作系统执行任务的最小单元

  • 把一个系统比作一个办公室,进程就是一个个打工人

  • 正常情况下,一个进程是能感知到其他进程的存在的
  • 容器技术首先要解决的就是进程的隔离,即一个进程在运行的时候看不到其他进程

容器是隔离进程的运行环境,在这个环境中运行的进程本质上是一个运行在沙盒中的隔离进程。

Docker只是提供了一系列工具,帮助我们设置了这个进程隔离的环境,好让我们启动进程,纯粹地在里面运行1个沙盒隔离的进程

相关推荐
哦虎!5 小时前
【JavaEE】网络初识
java
for_ever_love__5 小时前
MySQL ORDER BY 排序优化:从 Using filesort 到索引有序扫描(含双路 / 单路排序原理)
java·mysql·优化·存储·by·order·filesort
我是人✓6 小时前
Java文件上传三方式对比:从传统到SpringBoot
java·开发语言
欣栀♡6 小时前
JVM 频繁 Full GC 先看日志括号里的 cause,jstat 的 FGC 在 JDK 8 上会骗人
java·jvm
IT研究室6 小时前
最新计算机毕业设计选题推荐-基于spring boot的葡萄酒文化宣传网站-网站-文档指导-Java-springboot
java·spring boot·课程设计
慧都小项6 小时前
MyEclipse 中创建和测试 JAX-RS REST 接口:从项目配置到 REST Explorer
java·restful·myeclipse·jax-rs
Wang's Blog6 小时前
Java 项目实战: 交友项目 - 入门案例:编写 Dubbo 服务提供者
java·dubbo·交友
空空dream7 小时前
03 | 离线部署 FastAPI + Ollama(qwen2:0.5b):从 Docker 联调到 Kubernetes 验收
docker·ai·kubernetes·fastapi
秋饼7 小时前
Spring AI 2.0 结构化输出企业级实战:从 BeanOutputConverter 源码到生产级解析容错
java·ai·技术分享·后端开发
摇滚侠7 小时前
《计算机是如何工作的:人人都能懂的计算机软硬件工作原理》第 9 章 机器码与汇编语言 阅读笔记 9
java·开发语言·笔记