5、CPU 的线程与操作系统的线程有何关系?操作系统中的进程和线程是什么关系?
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)【从数量上比较】线程数远大于进程数,一个进程可以有一个或多个线程。
5、CPU 的线程与操作系统的线程有何关系?操作系统中的进程和线程是什么关系?的更多相关文章
- c#Winform程序调用app.config文件配置数据库连接字符串 SQL Server文章目录 浅谈SQL Server中统计对于查询的影响 有关索引的DMV SQL Server中的执行引擎入门 【译】表变量和临时表的比较 对于表列数据类型选择的一点思考 SQL Server复制入门(一)----复制简介 操作系统中的进程与线程
c#Winform程序调用app.config文件配置数据库连接字符串 你新建winform项目的时候,会有一个app.config的配置文件,写在里面的<connectionStrings n ...
- python中的进程、线程(threading、multiprocessing、Queue、subprocess)
Python中的进程与线程 学习知识,我们不但要知其然,还是知其所以然.你做到了你就比别人NB. 我们先了解一下什么是进程和线程. 进程与线程的历史 我们都知道计算机是由硬件和软件组成的.硬件中的CP ...
- windows中的进程和线程
今天咱们就聊聊windows中的进程和线程 2016-09-30 在讨论windows下的进程和线程时,我们先回顾下通用操作系统的进程和线程.之所以称之为通用是因为一贯的本科或者其他教材都是这么说的: ...
- Node.js 中的进程和线程
线程和进程是计算机操作系统的基础概念,在程序员中属于高频词汇,那如何理解呢?Node.js 中的进程和线程又是怎样的呢? 一.进程和线程 1.1.专业性文字定义 进程(Process),进程是计算机中 ...
- Java中的进程和线程
Java中的进程与线程 一:进程与线程 概述:几乎任何的操作系统都支持运行多个任务,通常一个任务就是一个程序,而一个程序就是一个进程.当一个进程运行时,内部可能包括多个顺序执行流,每个顺序执行流就是 ...
- Java中的进程与线程(总结篇)
详细文档: Java中的进程与线程.rar 474KB 1/7/2017 6:21:15 PM 概述: 几乎任何的操作系统都支持运行多个任务,通常一个任务就是一个程序,而一个程序就是一个进程.当一个进 ...
- (转)java中的进程与线程
(转自地址http://www.ibm.com/developerworks/cn/java/j-lo-processthread/) Java 进程的建立方法 在 JDK 中,与进程有直接关系的类为 ...
- java中的进程与线程及java对象的内存结构【转】
原文地址:http://rainforc.iteye.com/blog/2039501 1.实现线程的三种方式: 使用内核线程实现 内核线程(Kernel Thread, KLT)就是 ...
- python中的进程和线程
什么是进程(process)? 程序并不能单独运行,只有将程序装载到内存中,系统为它分配资源才能运行,而这种执行的程序就称之为进程.程序和进程的区别就在于:程序是指令的集合,它是进程运行的静态描述文本 ...
随机推荐
- Using Swap
# create swap file dd if=/dev/zero of=/.swap bs=1048576 count=4096 # format swap mkswap /.swap # sta ...
- golang中如何将json文件解析成结构体
package tool import ( "bufio" "encoding/json" "fmt" "os" ) t ...
- 【Vulnhub靶场】EMPIRE: BREAKOUT
环境准备 下载靶机,导入到vmware里面,这应该不用教了吧 开机可以看到,他已经给出了靶机的IP地址,就不用我们自己去探测了 攻击机IP地址为:192.168.2.15 靶机IP地址为:192.16 ...
- List<Integer>里有可能存String类型元素吗?
这其实是我遇到的一个线上bug,在这里分享给大家. 如果是用反射,那就很简单了,毕竟泛型只是在编译期进行约束,对运行期是无能为力的. 想想看,如果不使用反射,有没有办法做到呢? 问题起因 在我们公司的 ...
- Linux中date命令用法
1.以下是服务器现在的时间,当前时间的各种表示方法,表示成自己想要的时间格式,后面的范例将会在这个时间基础之上进行演示,同时这也是熟练掌握后面各种date命令的前提,请读者注意 [root@RHEL6 ...
- CEH v8~v11 Module Slides 和 Lab Manual 下载
课程内容 CEH v8 01 Introduction to Ethical Hacking CEH v8 02 Footprinting and Reconnaissance CEH v8 03 S ...
- table 增加或删除一行
转载请注明来源:https://www.cnblogs.com/hookjc/ <HTML><SCRIPT LANGUAGE="JScript">funct ...
- Ubuntu 18.04 修改默认源为国内源
1.备份/etc/apt/sources.list #备份 cp /etc/apt/sources.list /etc/apt/sources.list.bak 2.在/etc/apt/sources ...
- Git Push 免输 用户名和密码
前言 在大家使用github的过程中,一定会碰到这样一种情况,就是每次要push 和pull时总是要输入github的账号和密码,这样不仅浪费了大量的时间且降低了工作效率.在此背景下,本文在网上找了两 ...
- Python起航
安装Python 安装python 添加python安装目录到PATH 添加Scripts目录到PATH 如果同时安装了python2和python3,那么通过python和python3,pip和p ...