从计算机底层开始进入多线程

简介: 从计算机底层开始进入多线程

从计算机底层开始进入多线程

CPU(中央处理器)

CPU最核心的东西就是算术逻辑单元ALU,他只会做加法运算,这和我们平时理解的可能会不太一样,毕竟数学不是有加减乘除嘛,实际上二进制是有一个补码的操作的.他会把所有的其他操作都变成加法操作,乘法也无非就是多次相加罢了,理论上只要有加法器,就能制造出CPU.

CPU的效率是和时钟电路挂钩的,如果这个门电路可以一秒钟开关5000次,我们就能说这个CPU在一秒钟内可以运算5000次.

1.png

机器语言的演变

最开始我们使用的语言是机器语言,他是由0和1组成的,但是由于他们的直观性以及可维护性较差,汇编语言产生了, 比如把101111000这个机器语言改成指令move,当我们在汇编语言中输入move的时候,就相当于直接输入101111000,所以说汇编语言的底层就是机器语言.

计算机的组成

2.png

ALU:算术逻辑单元,做加法运算的.

Registers:寄存器.CPU从这读取最快.

PC:程序计数器.(JVM操作步数的).

内存:电脑内存,数据是临时的,从磁盘中IO出来.

磁盘:持久性存储数据的地方.

最开始在计算机当中其实是没有内存的,所有的数据都存放在寄存器当中,然后按下电门做计算就行了.

后来内存出现了,被用来当做存储我们程序的地方,当我们双击打开一个程序比如QQ.exe,我们的磁盘会把我们的程序QQ.exe加载到我们的内存当中.

进程的演变

单进程机器之后便是多进程机器,此时进程之间是可以相互通讯相互访问对方所持有的资源的,但是有一个缺点,如果有黑客进程那么他能够轻而易举的获取所有想要获取的信息,甚至可以直接调用操作系统的专属进程,控制硬件级别的操作,这是非常疯狂的事情.

随着时间的发展,又诞生了一个机制,叫做进程之间的隔离,双方都不能互相访问

线程的出现

随着持续的发展,我们会发现在一个进程内部也有那种同时执行的需求,也就是一个进程需要同时执行多条路径,比如360需要同时进行体检和清理垃圾,这个东西就叫做线程,在这里我们可以提出一些相关的问题.

比如什么是进程? 什么是线程?

上图中被加载的QQ就是一个进程,QQ可以打开多个,这就是多个进程.

我们可以说一个正在运行着的程序就是一个进程.

线程指的是在一个进程当中可以并行执行的路径.

程序被执行过程中发生了什么?

QQ从磁盘中被加载到了内存当中,我们先找到主线程的代码,然后CPU通过总线进行读取把数据放入到寄存器当中进行运算并且再次回写到内存当中.

是不是线程数量越多,执行效率就越高?

不是的,cpu切换线程会有一个时间,如果线程数量较多的话,他会把大量的时间浪费在线程切换上面,进而导致效率不增反减.

线程切换的过程

3.png

假设PC执行到了T1线程的第二步,此时寄存器当中存放的是T1的数据,PC中存放的是执行到第二步的状态.这时候线程的执行权要交给T2了,T1的所有数据会放到缓存中进行一个保存的操作.

对于一个程序,设置多少线程合适?

得看线程占用CPU的时长密集度来判断, 有些是IO密集型,有些是CPU密集型,比如说占用1秒,不占1秒,是一个1比1的时间关系,那么这个时候就可以放2个线程在CPU当中,达到百分百占用.让我们更好的压榨CPU的性能.

超线程

4.png

又名线程撕裂者,从本身的切换线程需要从内存读取数据,到后来的超线程也就是线程撕裂者,只需要在cpu内读取对应线程寄存器就行,速度非常快.

目录
相关文章
|
9月前
|
Linux
计算机操作系统学习笔记(6)——进程和线程
计算机操作系统学习笔记(6)——进程和线程
54 0
|
9月前
|
存储 算法 调度
《计算机操作系统-第五章》之线程与多线程模型
《计算机操作系统-第五章》之线程与多线程模型
123 0
|
10月前
|
缓存 负载均衡 前端开发
【计算机组成原理】4核心8线程的服务器每秒大概能处理多少请求?
【计算机组成原理】4核心8线程的服务器每秒大概能处理多少请求?
202 0
|
10月前
|
Java 程序员 编译器
从根上理解高性能、高并发:深入计算机底层,理解线程与线程池
作为即时通讯技术的开发者来说,高性能、高并发相关的技术概念早就了然于胸,什么线程池、零拷贝、多路复用、事件驱动、epoll等等名词信手拈来,又或许你对具有这些技术特征的技术框架比如:Java的Netty、Php的workman、Go的nget等熟练掌握。但真正到了面试或者技术实践过程中遇到无法释怀的疑惑时,方知自已所掌握的不过是皮毛。
|
Web App开发 调度
细说计算机中的进程与线程
1.进程的概念 平时在使用电脑的过程中,可能会登陆QQ,一边开着网易云音乐,一边开着chrome浏览器或者火狐浏览器在网页上看视频,甚至还会打开word软件,编辑文档。 假设现在电脑上同时打开这四个程序,QQ,网易云音乐,chrome浏览器,word软件,此时对电脑主机来说,CPU(中央处理器)会在这打开的四个程序中依次循环切换。
1001 0
|
17天前
|
Java 数据库 Android开发
【专栏】Kotlin在Android开发中的多线程优化,包括线程池、协程的使用,任务分解、避免阻塞操作以及资源管理
【4月更文挑战第27天】本文探讨了Kotlin在Android开发中的多线程优化,包括线程池、协程的使用,任务分解、避免阻塞操作以及资源管理。通过案例分析展示了网络请求、图像处理和数据库操作的优化实践。同时,文章指出并发编程的挑战,如性能评估、调试及兼容性问题,并强调了多线程优化对提升应用性能的重要性。开发者应持续学习和探索新的优化策略,以适应移动应用市场的竞争需求。
|
5天前
|
Java 数据库
【Java多线程】对线程池的理解并模拟实现线程池
【Java多线程】对线程池的理解并模拟实现线程池
13 1
|
5天前
|
设计模式 消息中间件 安全
【Java多线程】关于多线程的一些案例 —— 单例模式中的饿汉模式和懒汉模式以及阻塞队列
【Java多线程】关于多线程的一些案例 —— 单例模式中的饿汉模式和懒汉模式以及阻塞队列
11 0
|
5天前
|
Java
【Java多线程】分析线程加锁导致的死锁问题以及解决方案
【Java多线程】分析线程加锁导致的死锁问题以及解决方案
16 1
|
5天前
|
存储 缓存 安全
【Java多线程】线程安全问题与解决方案
【Java多线程】线程安全问题与解决方案
16 1