来来来,线程基本概念了解一下~~~

线程的概念

那么什么是线程呢?
百度百科是这样介绍的:

线程,有时被称为轻量级进程(Lightweight Process,LWP),是程序执行流的最小单元。一个标准的线程由线程ID,当前指令指针(PC),寄存器集合和堆栈组成。另外,线程是进程中的一个实体,是被系统独立调度和分派的基本单位,线程自己不拥有系统资源,只拥有一点儿在运行中必不可少的资源,但它可与同属一个进程的其它线程共享进程所拥有的全部资源。一个线程可以创建和撤消另一个线程,同一进程中的多个线程之间可以并发执行。由于线程之间的相互制约,致使线程在运行中呈现出间断性。线程也有就绪、阻塞和运行三种基本状态。就绪状态是指线程具备运行的所有条件,逻辑上可以运行,在等待处理机;运行状态是指线程占有处理机正在运行;阻塞状态是指线程在等待一个事件(如某个信号量),逻辑上不可执行。每一个程序都至少有一个线程,若程序只有一个线程,那就是程序本身。


我们可以总结出来以下几个要点:

  • 在一个程序里的一个执行路线叫做一个线程(thread)。更准确的说,线程“是一个进程内部的控制序列”
  • 一切进程至少有一个执行线程

值得注意的是我们不要讲进程与线程的概念混淆,线程和进程具体有一下几点不同:

  • 进程是资源竞争的基本单位
  • 线程是程序执行的最小单位
  • 线程共享进程数据但也拥有自己的一部分必不可少的资源:
    1.线程ID 2.一组寄存器 3.栈 4.errno 5.信号屏蔽字 6.调度优先级

换句话说线程具有独立的上下文私有的栈结构。

前面我们说多个线程可以共享进程的数据,具体有哪些呢?

  1. Text Segment 和 Data Segment都是共享的,如果定义一个函数在各线程中都可以调用。如果定义一个全局变量,在各线程中都可以访问到。
  2. 文件描述符
  3. 信号的处理方式
  4. 当前工作目录
  5. 用户id和组id

至此,我们可以总结出线程的优缺点:
优点:

  • 创建一个新线程的代价要比创建一个新进程小的多
  • 与进程之间的切换相比,线程之间的切换操作系统的负担小的多
  • 线程占用的而资源少的多
  • 充分利用多处理器的可并行数量
  • 在等待慢速I/O操作时,程序可以执行其他的计算任务
  • 计算密集型应用,为了能在多处理器系统上运行,将计算分解到多个线程中实现
  • I/O密集型应用,为了提高性能,将I/O操作重叠。线程可以同时等待不同的I/O操作。

缺点:

  • 性能损失:如果计算密集型线程数量比可用处理器数量多,那么可能会有较大的性能损失。这里的性能损失指的是增加了额外的同步和调度开销,而可用的资源不变。
  • 健壮性降低:线程是缺乏保护的。
  • 缺乏访问控制:进程是访问控制的基本粒度,在一个线程中调用某些OS函数会对整个进程造成影响。
  • 编程难度高

以上是关于线程的基本介绍,关于线程控制的问题可以参考我的博客:

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章