多线程和CPU的关系

摘要:
线程是进程的实体,属于进程,是CPU调度和调度的基本单元。第一阶段是CPU和线程之间的关系。在单CPU时代,单个CPU只能在同一时间点执行单个线程。它取决于操作系统的设计和CPU本身来确定哪个线程在哪个CPU上执行。假设A和B具有相同的优先级,A有3个线程,B有1个线程,那么CPU分配给A和B的执行时间应该是3:1。因此,多线程实际上是多个计算机资源的并行使用,与CPU有多少内核无关。
  1. 什么是CPU

(1)         Central  Progressing  Unit 中央处理器,是一块超大规模的集成电路,是一台计算机的运算核心和控制核心。

(2)         CPU包括 运算器,高速缓冲存储器,总线。

(3)         它的工作,主要是解释计算机中的指令,和处理计算机软件中的数据。它在计算机中起着最重要的作用,构成了系统的控制中心,对各个应用程序进行统一协调和控制。

  1. 线程

(1)         进程,一个进程就是一个具有独立功能的应用程序,关于某个数据集合上的一次运行活动。进程是系统进行资源分配和调度的一个独立单位。

(2)         线程,线程是进程的实体,属于进程,是CPU调度和分派的基本单位。

 资源分配给进程,所有线程共享该进程的资源

(3)         操作系统的设计,可以归纳为3点。

  1. 以多进程形式,允许多个任务同时运行。
  2. 以多线程形式,允许一个任务拆分成多个线程运行。
  3. CPU提供协调机制,允许线程之间共享资源,防止线程之间产生冲突。
  4. CPU和线程的关系

(1)         第一阶段,单CPU时代,单CPU在同一时间点,只能执行单一线程。比如,的某一刻00:00:00 这一秒,只计算1+1=2(假设cpu每秒计算一次)

(2)         第二阶段,单CPU多任务阶段,计算机在同一时间点,并行执行多个线程。但这并非真正意义上的同时执行,而是多个任务共享一个CPU,操作系统协调CPU在某个时间点,执行某个线程,因为CPU在线程之间切换比较快,给人的感觉,就好像多个任务在同时运行。比如,电脑开了两个程序qq和qq音乐,假设这两个程序都只有一个线程。人能够感觉到CPU切换的频率是一秒一次,假设当前cpu计算速度是1秒1次,那么我们就能明显感到卡顿,当聊天,点击发送按钮时候,qq音乐就会停止运行。当前cpu计算速度是1秒100次,也就是它能在一秒之内在这两个进程见切换100次,那么我们就感不到卡顿,觉得QQ和QQ音乐是同时在运行。

(3)         第三阶段,多CPU多任务阶段,真正实现的,在同一时间点运行多个线程。具体到哪个线程在哪个CPU执行,这就跟操作系统和CPU本身的设计有关了。

  1. 举例说明

(1)假设一种极端情况,一台单核计算机,只运行2个程序A和B。

假设A和B的优先级相同,A有3个线程,B有1个线程,那么CPU分配给A和B的执行时间应该是3:1。

(2)假设同一种情况发生在一台多核计算机,核1处理A和B各一个线程,核2处理A剩下的线程。

(3)刚才说的是线程只消耗CPU,在实际应用中这种情况是不存在的,程序总会跟资源打交道,比如读个文件,查询数据库,访问网络,这个时候多线程才能体现出优势。在一个进程中,让A先用一下CPU去查询数据库,在A查询数据库的时候CPU空闲,B就用一CPU去读文件,让C去访问网络。相对于查询数据库,读取文件这些操作来说,CPU的计算时间几乎可以忽略不计。所以,多线程,实际上是计算机多种资源的并行运用,跟CPU有几个核心没什么关系。

免责声明:文章转载自《多线程和CPU的关系》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇ncurses文档和源码以及demo在 CentOS 中安装 ClamAV 和 LMD 反病毒反恶意软件等工具下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

2019-1-29-C#-Task.Run-和-Task.Factory.StartNew-区别

title author date CreateTime categories C# Task.Run 和 Task.Factory.StartNew 区别 lindexi 2019-01-29 16:14:52 +0800 2018-06-16 16:22:49 +0800 C# 有小伙伴问我,为什么不推荐他使用 Task.Factory....

adb连接不上手机,提示“List of devices attached”及相关操作

常用指令合集: 1、adb devices  查看连接的设备 2、adb logcat -v -time > 1.log (文件名可随意更改)   启动adb 1.打开cmd首次使用adb devices,出现下面这两句,就是正在启动adb服务 C:Usersadmin>adb devices List of devices attached...

win10如何设置开机自动启动热点WIFI?

1.编写脚本文件(先新建txt文件,编写代码内容netsh wlan start hostednetwork,最后重命名成HotSpot.bat):文件名称:HotSpot.bat,代码内容: netsh wlan start hostednetwork 2.保存到C:ProgramDataMicrosoftWindowsStart MenuProgram...

QT5 Thread线程

QT5 Thread线程继承QThread方式 一.首先分析一下 QTimer Class与 Sleep()函数之间的秘密 QTimer *t = new QTimer(*parent); //创建QTimer 对象 t->start(_time); //计时开始每隔_time时间自动触发&QTimer::timeout信号 t->st...

Thinkpad USB 经典键盘使用体验

先上图,这就是一个键盘,不是笔记本电脑。 优点: 1. 键盘完胜各类巧克力式键盘。 2. 小红点和老thinkpad 上的小红点一样好用。 3. ESC 和Delete 放大后,盲摸很方便。 缺点: 1. 驱动有时会失效。 2. 驱动下载链接不好找, http://support.lenovo.com/us/en/documents/migr-731...

【多线程】无锁编程以及CAS

无锁编程 / lock-free / 非阻塞同步 无锁编程,即不使用锁的情况下实现多线程之间的变量同步,也就是在没有线程被阻塞的情况下实现变量的同步,所以也叫非阻塞同步(Non-blocking Synchronization)。 实现非阻塞同步的方案称为“无锁编程算法”( Non-blocking algorithm)。 lock-free是目前最常见的...