博客原文:
https://zhangxingr.github.io/2018/08/08/%E7%AE%80%E8%BF%B0%E7%BA%BF%E7%A8%8B/#more
前言
现代软件系统中,除了进程之外,线程也是一个十分重要的概念。特别是随着CPU频率增长开始出现停滞,而开始向多核方向发展。多线程,作为实现软件并发执行的一个重要的方法,也开始具有越来越重要的地位。
什么是线程呢?
线程(Thread)是程序执行流中最小的单位,可以简单地理解为一个进程(Process)由多个线程组成,因此,也有人把线程叫做轻量级的进程。一个标准的线程由线程ID,当前指令指针,寄存器集合和堆栈组成。多个线程共享进程的内存空间和进程级的资源。
大多数软件都不至一个线程,多个线程可以互不干扰的并发执行,并共享进程的全局变量和堆的数据。
多线程相比单线程的优势在哪儿呢?
- 当线程进入某个等待操作或者很耗时需要大量计算的操作的时候,譬如等待网络响应的时候,如果是单线程就整个线程都停下来等待了,而多线程则可以两个线程,一个负责等待网络响应,一个负责继续做其他事情。
- 现在很多程序都需要并发执行,譬如我除了主线程的逻辑之外,我还要接收来自消息系统(诸如mq、kafka等)的消息,怎么办呢?只有使用多线程。
- 而且相比而言,多想称在共享程序资源方面效率很高。
线程的访问权限
线程的访问非常自由,它可以访问进程内存里的所有数据,甚至包括其他线程的堆栈,同时也有自己的私有存储空间:栈,寄存器。
线程调度
线程总是并发执行的,然后只有当线程数量少于CPU的数量的时候才是真正的并发执行,这个时候,每个线程都在一个CPU上运行。大多数情况都是一个CPU上跑了多个线程,这个时候线程并发就是一种模拟出来的状态。操作系统会让多线程轮流执行,这就是线程调度。
关于线程调度的方法有很多,但基本都有线程优先级调度和轮转法。
参考文献
程序员的自我修养