线程的基本概念

一、 线程的概念, 总结Linux下线程有什么特点。
1)什么是线程

  • 在一个程序里的一个执行路线就叫做线程(thread)更准确的定义就是“线程就是一个进程内部的控制序列”。线程是在进程内部运行的执行流(线程在进程的地址空间)。
  • 一切进程至少有一个执行线程
  • Linux没有真正的线程,用进程模拟线程,linux下的进程称为轻量级进程
  • 线程是调度的基本单位

2)进程和线程

线程与进程的区别可以归纳为以下4点:
1)地址空间和其它资源(如打开文件):进程间相互独立,同一进程的各线程间共享。某进程内的线程在其它进程不可见。
2)通信:进程间通信IPC,线程间可以直接读写进程数据段(如全局变量)来进行通信——需要进程同步和互斥手段的辅助,以保证数据的一致性。
3)调度和切换:线程上下文切换比进程上下文切换要快得多。 4)在多线程OS中,线程不是一个可执行的实体。 相关的补充说明:
- 进程是资源竞争的基本单位
- 线程是程序执行的最小单位

线程共享进程数据,但也拥有自己的私有的一部分数据,

  • a)线程ID
  • b)一组寄存器;
  • c)
  • d)errno;
  • e)信号屏蔽字);
  • f)调度优先级
    其中最主要的是线程具有的是私有上下文数据和栈

进程和线程的关系图如下:
这里写图片描述
3)线程的共享资源
- 同一地址空间中因此Text Ssgment、Data Segment都是共享的,如果定义一个函数,在各线程中都可以进行调用,如果定义一个全局变量,在各线程中都可以访问到。除此之外,所有的线程还共享以下进程资源和环境

  • 文件描述符
  • 每种信号的处理方式(SIG_IGN、SIG_DFL或者自定义的信号处理函数)
  • 当前工作目录
  • 用户id和组id

线程的优点:

  • 创建一个新线程的代价要比创建一个新进程的代价要小的多
  • 与进程之间的切换相比,线程之间的切换需要操作系统做的工作要少的多
  • 线程占用的资源要比进程少很多
  • 能够使用多处理器的课并行使用
  • 在等待慢速I/O操作结束的同时,程序可执行其他的计算任务
  • 计算密集型应用,为了能在多处理器系统上运行,将计算机分解到多个线程中去实现
  • I/O密集型应用,为了提供性能,为I/O操作重叠,线程可以同时等待不同的I/O操作

线程的缺点:

  • 性能损失
  • 健壮性降低
  • 缺乏访问控制
  • 编程难度提高

猜你喜欢

转载自blog.csdn.net/daboluo521/article/details/80102146