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

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

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

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内读取对应线程寄存器就行,速度非常快.

目录
相关文章
|
Java 程序员 编译器
从根上理解高性能、高并发:深入计算机底层,理解线程与线程池
作为即时通讯技术的开发者来说,高性能、高并发相关的技术概念早就了然于胸,什么线程池、零拷贝、多路复用、事件驱动、epoll等等名词信手拈来,又或许你对具有这些技术特征的技术框架比如:Java的Netty、Php的workman、Go的nget等熟练掌握。但真正到了面试或者技术实践过程中遇到无法释怀的疑惑时,方知自已所掌握的不过是皮毛。
|
Linux
计算机操作系统学习笔记(6)——进程和线程
计算机操作系统学习笔记(6)——进程和线程
78 0
|
存储 算法 调度
《计算机操作系统-第五章》之线程与多线程模型
《计算机操作系统-第五章》之线程与多线程模型
171 0
|
缓存 负载均衡 前端开发
【计算机组成原理】4核心8线程的服务器每秒大概能处理多少请求?
【计算机组成原理】4核心8线程的服务器每秒大概能处理多少请求?
318 0
|
Web App开发 调度
细说计算机中的进程与线程
1.进程的概念 平时在使用电脑的过程中,可能会登陆QQ,一边开着网易云音乐,一边开着chrome浏览器或者火狐浏览器在网页上看视频,甚至还会打开word软件,编辑文档。 假设现在电脑上同时打开这四个程序,QQ,网易云音乐,chrome浏览器,word软件,此时对电脑主机来说,CPU(中央处理器)会在这打开的四个程序中依次循环切换。
1024 0
|
1月前
|
存储 消息中间件 资源调度
C++ 多线程之初识多线程
这篇文章介绍了C++多线程的基本概念,包括进程和线程的定义、并发的实现方式,以及如何在C++中创建和管理线程,包括使用`std::thread`库、线程的join和detach方法,并通过示例代码展示了如何创建和使用多线程。
43 1
C++ 多线程之初识多线程
|
23天前
|
Java 开发者
在Java多线程编程中,创建线程的方法有两种:继承Thread类和实现Runnable接口
【10月更文挑战第20天】在Java多线程编程中,创建线程的方法有两种:继承Thread类和实现Runnable接口。本文揭示了这两种方式的微妙差异和潜在陷阱,帮助你更好地理解和选择适合项目需求的线程创建方式。
17 3
|
23天前
|
Java 开发者
在Java多线程编程中,选择合适的线程创建方法至关重要
【10月更文挑战第20天】在Java多线程编程中,选择合适的线程创建方法至关重要。本文通过案例分析,探讨了继承Thread类和实现Runnable接口两种方法的优缺点及适用场景,帮助开发者做出明智的选择。
16 2
|
23天前
|
Java
Java中多线程编程的基本概念和创建线程的两种主要方式:继承Thread类和实现Runnable接口
【10月更文挑战第20天】《JAVA多线程深度解析:线程的创建之路》介绍了Java中多线程编程的基本概念和创建线程的两种主要方式:继承Thread类和实现Runnable接口。文章详细讲解了每种方式的实现方法、优缺点及适用场景,帮助读者更好地理解和掌握多线程编程技术,为复杂任务的高效处理奠定基础。
28 2
|
23天前
|
Java 开发者
Java多线程初学者指南:介绍通过继承Thread类与实现Runnable接口两种方式创建线程的方法及其优缺点
【10月更文挑战第20天】Java多线程初学者指南:介绍通过继承Thread类与实现Runnable接口两种方式创建线程的方法及其优缺点,重点解析为何实现Runnable接口更具灵活性、资源共享及易于管理的优势。
28 1