首页 技术 正文
技术 2022年11月16日
0 收藏 618 点赞 2,582 浏览 2003 个字

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

我们现在看到CPU,很多都支持HT,经常看到的2C4T的意思就是2核4线程(core,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自己来签到的,是不是很简单?
操作系统中的Thread
OS中的Thread有自己的栈空间,和同一进程中的其他线程共享地址空间等等,这些基本知识因为广为人所知,这里就不罗嗦了。

此Thread非彼Thread
操作系统中的进程可以很多,进程中的线程就更多了,常常有几十个上百个。而CPU的Thread就那么固定几个,是稀缺资源。两者都叫Thread是因为
他们都是调度的基本单位,软件操作系统调度的基本单位是OS的Thread,硬件的调度基本单位是CPU中的Thread。操作系统负责把它产生的软Thread调度到CPU中的硬Thread中去。一软一硬,干活不累!

软件中的线程是对硬件中线程进行抽象。就行操作系统中的簇是对硬盘中扇区进行抽象。

操作系统中的进程和线程的区别

进程(有时候也称做任务)

进程是指一个程序运行的实例,一个程序可以多次运行 产生多个进程,进程与进程之间数据空间是互相独立的,进程A崩溃了完全不会影响到进程B,所以现在很多浏览器都采用多进程的方式来实现,打开一个网页对应fork()一个进程来执行。

fork() 详细讲解:https://blog.csdn.net/u013851082/article/details/76902046

1. 每个进程拥有完全不同的虚拟地址空间,操作系统内核通Address Translation技术映射到物理地址空间(X86处理器体系架构采用段表+页表进行映射,页表有2级和4级之分,32位系统采用2级页表,64位系统采用4级页表),这让进程有一种幻觉即独占整个内存空间。进程是程序在执行过程中分配和管理资源的基本单位。进程程序集 里面存放了一个程序的入口点。

一个在内存中运行的应用程序。每个进程都有自己独立的一块内存空间,一个进程可以有多个线程,比如在Windows系统中,一个运行的xx.exe就是一个进程。

线程是CPU调度和分派的基本单位,它可与同属一个进程的其他的线程共享进程所拥有的全部资源。

多线程程序只要有一个线程死掉,整个进程也死掉了 这是为什么?四核即代表着该CPU具有四个“CPU”,八线程则意味着每个CPU存有两个逻辑线程,总共有八个线程。每个单位时间内,一个 CPU 只能处理一个线程(操作系统:thread)。

软件中的线程和时分复用生成的CPU线程、和cpu伪核线程 的区别

软件中的线程:是对cpu利用时分复用技术生成的线程的抽象。就像操作系统中的簇是对硬盘中扇区进行抽象。

cpu伪核线程: cpu的4核八线程,这个线程指的是伪核,就虚拟的8个cpu。    cpu中的利用时分复用技术 生成的线程概念是不一样的,完全是两码事。

cpu时分复用线程:cpu利用时分复用技术将多个虚拟cpu(八线程)进行时间切片,生成不同的线程。

 

谈谈你对Windows多线程编程的认识

回答思路:

(1)【什么是进程和线程?】进程是系统资源的拥有者;线程是Windows任务调度的最小单位。

(2)【进程和线程有什么?】Windows下,进程占有4G的地址空间;线程只占用运行必须的stack。

(3)【进程和线程的关系?】进程是线程的容器,线程必须在进程中运行,每个进程创建时都会有一个主线程被创建。

(4)【从数量上比较】线程数远大于进程数,一个进程可以有一个或多个线程。

相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:9,105
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,582
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,429
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,200
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:7,836
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:4,919