【windows 操作系统】线程

发布时间:2022-06-28 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了【windows 操作系统】线程脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。

前言

  • 出现的背景:由于进程是一个资源的拥有者,因而在进程的创建、撤销、和切换的过程中,系统必须为之付出较大的时空开销,限制了并发程度的进一步提高。
  • 要解决的问题:解决进程的创建、撤销、和切换的过程中,系统必须为之付出较大的时空开销的问题
  • 解决的方法:将进程的两个属性分开,由操作系统分开处理。把“独立调度、分配的基本单位”这个属性分离出来作为线程;而把进程作为资源拥有的基本单位,线程作为进程中的一个实体而存在。

线程的出现

我们首先回顾进程的两个基本属性:

  • 进程使一个可拥有资源的独立单位
  • 进程同时又是一个可以独立调度和分派的基本单位。

正是由于这两个基本属性,才使进程成为一个能独立运行的基本单位,从而构成了进程并发执行的基础。

由于进程是一个资源的拥有者,因而在进程的创建、撤销、和切换的过程中,系统必须为之付出较大的时空开销。为了解决这个问题,不少操作系统的学者们想到:将进程的两个属性分开,由操作系统分开处理。即对作为调度和分派的基本单位,不同时作为独立分配资源的单位,以使之轻装运行;而对拥有资源的基本单位,又不频繁地对之进行切换,在这种思想的指导下,产生了线程的概念。

线程引入的原因: 为了减少程序并发执行所付出的时空开销,使os具有更好的并发性。

在引入线程的os 中,线程是进程中的一个实体(进程中的一个或多个指令执行流),是被系统独立调度和分派的基本单位。线程基本上不再拥有系统资源,(只拥有一点在运行中必不可少的资源,如程序计数器、寄存器和栈),但它可与同属一个进程的其他线程功能共享进程所拥有的全部资源。线一个线程可以创建和撤销另一个线程;同一进程中的多个线程之间可以并发执行。

线程是进程中的一个实体,是被系统独立调度和分派的基本单位,线程自己不拥有系统资源,只拥有一点在运行中必不可少的资源,但它可与同属一个进程的其它线程共享进程所拥有的全部资源。一个线程可以创建和撤消另一个线程,同一进程中的多个线程之间可以并发执行。由于线程之间的相互制约,致使线程在运行中呈现出间断性。线程也有就绪、阻塞和运行三种基本状态。

 

 

线程和线程

 

现代的大多数操作系统都支持线程的使用,因为进程所具有的两个特点资源所有权和调度,但是操作系统更希望将这两个特点分开进行处理,于是便诞生了线程,我们将进程视为资源分配的基本单位,将线程视为处理器调度的基本单位,线程也可以视为一个轻量级进程。在多线程环境下,每个进程依然有自己的进程控制块以及进程映像,但是进程中的每个线程也拥有属于自己的独立的栈以及线程控制块,控制块中存储着线程状态,调度优先级,上下文数据等,这些是每个线程独立的信息

 

 详细请看

 

线程

 

CPU中的线程

 

    CPU中的线程,我们叫它们Thread,和OS中的线程的名字一样。它来自同步多线程(SMT,Simultaneous Multi-threading)的概念。我们现在在Intel的CPU上看到它,实际上这并不是Intel的发明创造。它最早起源于学术圈,在硬件上IBM实现也比Intel早。最早Intel使用了这种技术时候就叫做SMT,但后面改叫做HT (Hyper Threading),可能是这样更清楚(毕竟最多两个thread,比IBM怪物要少),更朗朗上口吧。

 

我们现在看到CPU,很多都支持HT,经常看到的2C4T的意思就是2核4线程(T,Thread)。1个内核

 

中的thread是对称的和对等的,在软件上没有任何区别,BIOS也只有通过一些特殊手段才能区分。实际上,2C4T中的4个thread调度起来没有本质区别,它们都有自己单独的身份证号码:APIC ID。调度起来只要知道别人的APIC ID,就用自己的Local APIC寄存器发出两个IPI(Inter-Processor Interrupts)就好了,那个被指明的倒霉蛋就莫名其妙的开始被调度去指定的地址执行指令了(尽管是实模式)。当然也可以广播IPI让所有别的thread都去执行指定任务。更多相关内容见:

 

实际上CPU中Thead有多少,操作系统并不自己探测,是BIOS通过ACPI报告给OS的,那么BIOS是怎么知道有多少个Thread呢?就是通过广播IPI让各个thread自己来签到的,是不是很简单?

 

 

 

操作系统和软件中的线程

 

       OS中的Thread有自己的栈空间,和同一进程中的其他线程共享地址空间等等,这些基本知识因为广为人所知,这里就不罗嗦了。两者都叫Thread是因为他们都是调度的基本单位,软件调度的基本单位是OS的Thread,硬件的调度基本单位是CPU中的Thread。操作系统负责把它产生的软Thread调度到CPU中的硬Thread中去 。

 

先,并行与并发都是程序多线程处理场景,因此,一旦提到并行与并发,那首先想到的是多线程。

 

线程的同步互斥

 

       线程同步是指线程之间所具有的一种制约关系,一个线程的执行依赖另一个线程的消息,当它没有得到另一个线程的消息时应等待,直到消息到达时才被唤醒。

 

线程互斥是指对于共享的进程系统资源,在各单个线程访问时的排它性。当有若干个线程都要使用某一共享资源时,任何时刻最多只允许一个线程去使用,其它要使用该资源的线程必须等待,直到占用资源者释放该资源。线程互斥可以看成是一种特殊的线程同步。

 

四种线程同步互斥的控制方法

 

  • 临界区:通过对多线程的串行化来访问公共资源或一段代码,速度快,适合控制数据访问。(在一段时间内只允许一个线程访问的资源就称为临界资源)。

  • 互斥量:为协调共同对一个共享资源的单独访问而设计的。

  • 信号量:为控制一个具有有限数量用户资源而设计。

  • 事件:用来通知线程有一些事件已发生,从而启动后继任务的开始。

多线程

在一段完整的代码中,往往会有需要独立的代码模块,而这些独立运行的程序片段叫作“线程”(Thread),利用多个线程编程的概念就叫作多线程处理(多线程编程),多线程是为了同步完成多项任务,不是为了提高运行效率,而是为了提高资源使用效率来提高系统的效率。多线程是在程序在同一时间需要完成多项任务的时候实现的。多线程的目的仅仅是为了提高资源利用效率。各个线程执行自己的任务,这些线程可以”同时进行“。同时进行并非同一时刻进行,而是在某一时间段内,完成所有任务,任务的运行有先后顺序。

 

Cpu执行线程

cpu加载当前线程上下文》执行计算》保存当前线程上下文》运行另外一个线程

脚本宝典总结

以上是脚本宝典为你收集整理的【windows 操作系统】线程全部内容,希望文章能够帮你解决【windows 操作系统】线程所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签:并发