1.操作系统、进程和线程
(1).操作系统
操作系统指的是管理计算机硬件与软件资源的计算机程序。
(2).进程
进程指的是程序的一次执行,是程序的真正运行实例,是资源分配的基本单位,在用户下达运行程序的命令后就会产生进程。
(3).线程
线程指的是CPU的基本调度单位,每个线程执行的都是进程代码的某个片段。
(4).三者的关系
操作系统是包含一个或多个进程的容器,而进程是包含一个或多个线程的容器。
(5).进程与线程的区别
- 起源不同:先有进程后有线程,起初只有进程,没有线程的概念,因为微处理器的的处理速度远远高于外设(键盘鼠标等等),才诞生了线程,线程的诞生是为了提高程序的运行效率。
- 概念不同:进程是操作系统分配资源和调度的基本单位,线程是CPU运行调度的基本单位。
- 内存共享方式不同:通常进程之间内存不会共享(如浏览器不会访问视频播放软件的内存),通常需要高级技巧才能实现进程间通信,实现内存共享(如IPC),而线程之间的内存共享则比较容易。
- 拥有的资源不同:线程本身是进程的一部分,所以每个线程拥有的资源肯定少于进程,而线程之间共有的内容主要是代码片段,不共有的主要是线程的堆栈和程序计数器。
- 数量不同:一个进程里面可以有很多线程,但是至少会有一个线程。
- 开销不同:线程的创建和终止比进程短,同一个进程内部的线程之间的切换比进程之间的切换要快,同一个进程的各个线程之间共享内存和资源文件,可以不通过内核进行通信。
2.串行、并行和并发
(1).串行和并行
串行是指一个一个的做,并行是指多个一起做,如下图所示的传输案例,一个数据块一个数据块传输称为串行传输,多个数据块一起传输称为并行传输。
(2).并发和并行
多个线程在一个处理器上交替运行称为并发,逻辑上的同时运行。
多个线程在多个处理器上同时运行称为并行,物理上的同时运行。
3.多线程
(1).概念
多线程是指在单个进程中运行多个线程,如果一个程序允许两个或以上的线程运行,那么它就是多线程程序。
(2).多线程示例
现实生活中的火车站买票案例(资源共享),如果一个火车站只有一个窗口卖票,那么其就是单线程工作模式。为了提高卖票效率,火车站会开多个窗口,那么就是多线程工作模式。
(3).为什么需要多线程
- 提高CPU的利用率:目前大部分CPU都是两核或者两核以上,如果不发挥多线程的优势,始终使用单线程,就会浪费计算资源,多线程可以充分发挥多核CPU的优势,提高处理速度,避免无效等待。
- 提升程序性能:处理器越多程序执行的就越快,但这取决于程序中代码并行的比例,并行比例越高,多处理器的效果越明显。如下图所示,横坐标是处理器个数,不同颜色表示程序中代码并行比例,纵坐标表示性能提升的倍数。
(4).什么场景会用到多线程
- 同时做多件不同的事情(异构化任务)
- 同时做多件相同的事情(高并发任务)
(5).多线程的局限
- 性能问题
- 上线文切换带来的消耗
- 异构化任务很难高效并行
- 安全问题
- 多线程会带来线程安全问题,包括数据安全和活跃性问题(死锁和饥饿)
4.高并发
(1).概念
高并发是指大量请求同时到达服务端的一种状态,而多线程是一种编程方式。
(2).高并发和多线程的联系
多线程是解决高并发的一种解决方案。高并发并不一定意味着是用多线程来解决的,比如使用Redis。
(3).指标
- QPS:每秒请求数
- PV:24小时内的点击量
- UV:24小时内的独立访客量