多线程的基本概念
1. 操作系统、进程、线程的包含关系
操作系统是包含多个进程的容器,而每个进程又是容纳多个线程的容器
2. Oracle文档的官方定义
进程: 使用fork(2)系统调用创建的UNIX环境(例如文件描述符,用户ID等),他被设置为运行程序
3. 什么是进程
英文是Process,指的是程序的一次执行,在用户下达运行程序的命令后,就会产生进程
总结: 进程是程序(这里可以理解为我们写的代码)的真正运行实例,是资源分配的基本单位
4. 什么是线程
靠谱定义是“线程是CPU的基本调度单位,每个线程执行的都是进程代码的某个片段”
5. 进程和线程的关系和区别
- 起源不同: 先有进程,后有线程
- 概念不同: 进程是具有一定独立功能的程序关于某个数据集合上的一次运行活动,进程是系统进行资源分配和调度的一个独立单位;线程是CPU调度单位
- 内存共享方式不同: 默认情况下,内存无法与其他进程共享;线程共享由操作系统分配给其父进程的相同内存块
- 拥有资源不同: 进程拥有独立内存,而线程自己基本不拥有系统资源,只拥有一点在运行中必不可少的资源(如程序计数器,一组寄存器和栈),但是它可与同属一个进程的其他线程共享进程所拥有的全部资源
- 线程共享的内容:
- 进程代码段
- 进程的公有数据(利用这些共享的数据,线程很容易实现相互之间的通讯)
- 进程打开的文件描述符
- 信号的处理器
- 进程的当前目录
- 进程用户ID与进程组ID
- 线程独有的内容:
- 线程ID
- 寄存器组的值
- 线程的堆栈
- 错误返回码
- 线程的信号屏蔽码
- 线程共享的内容:
- 数量不同: 一个程序至少有一个进程,一个进程至少有一个线程
- 开销不同:
- 线程的创建、终止时间比进程短
- 同一进程内的线程切换时间比进程切换短
- 同一进程的各个线程间共享内存和文件资源,可以不通过内核进行通信
- 相同点: 就绪、等待、运行等状态
6. java和多线程的关系
- java天生支持多线程,语言排名高
- java线程会一对一映射到操作系统
- JVM自动启动线程
- 线程信息
- Signal Dispatcher // 负责把操作系统发来的信息分发给适当的程序处理程序
- Finalizer // 负责对象的finalize()方法
- Reference Handler // 和GC、引用相关的线程
- main // 主线程,用户程序的入口
- 线程信息

浙公网安备 33010602011771号