随笔 - 12  文章 - 0  评论 - 0  阅读 - 2119

操作系统(6)---线程

一、线程

为什么引入线程?

单进程——>串行,多进程——>并发。问题:数据无法共享。进程之间不共享内存,就用多线程来解决。

多线程解决思路:

  在进程内部增加一类实体(线程),线程之间可以并发执行,可以共享相同的地址空间。

线程的概念:线程是进程的一部分,描述指令流执行状态,它是进程中的指令执行流的最小单元,是CPU调度的基本单位

因为总有不能共享的资源,所有线程也有线程控制块TCB(保持地址独立)。

                                                             

二、线程与进程

进程是资源分配单位,线程是CPU调度单位。

进程拥有一个完整资源平台,线程只独享指令流执行的必要资源,如堆栈、寄存器。

线程具有就绪、等待和运行三种基本状态和状态间的转换关系。

线程能减少并发执行的时间和空间开销

  • 线程的创建时间比进程短
  • 线程的终止时间比进程短
  • 同一进程内的线程切换时间比进程短

由于同一进程的各线程间共享内存和文件资源,可不通过内核进行直接通信

线程=进程-共享资源

 

  • 线程的优点:一个进程可以有多个线程,各线程可以并发执行,可以共享地址空间和文件等资源。
  • 线程的缺点:一个线程崩溃,所属进程的其他进程都会崩溃。

主线程和函数线程

 

  

 

上面的例子可以看出:

  • 主线程和函数线程并发执行
  • 函数线程若提前于主线程结束,不影响主线程运行
  • 主线程提前于函数线程结束,整个进程都会结束,其他进程均结束
  • 哪个线程先执行取决于调度算法和当时机器环境决定

 

 

三、用户线程与内核线程

用户线程:由用户级线程函数完成线程的管理(线程的创建、终止、同步和调度等),内核不知道用户线程的存在。

                                                           

用户线程是多对一结构,一个内核进程为多个用户线程服务。

优点:1.同一进程内的用户线程切换速度快,不依赖操作系统内核(可用于不支持线程的多进程操作系统),无需用户态/核心态的切换,线程切换代价比内核线程少。

   2.允许每个进程拥有自己的线程调度算法。

缺点:1.一个用户线程发起系统调用占用内核资源而阻塞时,整个进程进入等待,不会进行线程切换,因为内核不知道多线程的存在。

      2.不支持基于线程的处理机抢占。除非当前运行的线程主动放弃,否则其所在进程的其他线程无法抢占CPU。

      3.只能按进程分配CPU时间。多线程的进程中,每个线程的时间片段少。

 

内核线程:由内核通过系统调用实现线程机制,完成线程的管理(线程的创建、终止、同步和调度等)。

                                                           

 

内核线程是一对一结构(单核心处理器),一个内核线程服务一个用户线程;多核心处理器是多对多结构,对于多线程一个核心有多个选择,但一次仍然只服务一个用户线程。

优点(多核处理器下)

   1.内核可以并行同一进程的多个线程。

   2.一个线程执行系统调用而被阻塞不影响其他线程的执行,能够切换同一进程的其他线程继续执行(单核心处理器中,只有一个核心可用,可能会发生阻塞导致内核线程被延迟执行)

      3.以线程为单位进行CPU时间分配,多线程的进程可以获得更多CPU时间。

缺点:在单核处理器中,操作系统需要在不同线程之前切换来模拟并发执行,而线程的创建、终止、切换开销大,需要通过系统调用/内核函数在内核实现,涉及用户态/核心态的转换,速度和效率不如用户级线程

相比之下,多核处理器可以使多线程在不同的核心上执行,做到真正的并行,运行性能和效率得到了提升。多核处理器的效率受到算法的特点、线程调度机制、缓存等因素的综合影响,在某些情况下,当线程数超过了核心数量可能会导致线程间的资源竞争和调度,使CPU运行效率降低;但当线程的算力不足以充分利用CPU时,线程数的增加可以增加处理器的工作效率,比如超线程技术的使用。

 

posted on   小光翎  阅读(75)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

点击右上角即可分享
微信分享提示