来源百度百科:
进程(Process) 是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础。 在当代面向线程设计的计算机结构中,进程是线程的容器。程序是指令、数据及其组织形式的描述,进程是程序的实体。是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础。程序是指令、数据及其组织形式的描述,进程是程序的实体。
**线程(thread)**是操作系统能够进行运算调度的最小单位。它被包含在进程之中,是进程中的实际运作单位。一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务。
我们简单总结下:
进程:指在系统中正在运行的一个应用程序;程序一旦运行就是进程;进程——资源分配的最小单位。
线程:系统分配处理器时间资源的基本单元,或者说进程之内独立执行的一个单元执行流。线程——程序执行的最小单位。
2.1 进程(线程+内存+文件/网络句柄)
我们通过上面的图片进行进一步理解:
“内存”:
我们通常所理解的内存是我们所见到的(2G/4G/8G/16G)物理内存,它为什么会在进程之中呢?
实际上,这里的内存是逻辑内存。指的是内存的寻址空间。每个进程的内存是相互独立的。
否则的话会出现一个问题:我们把指针的值改一改就指向其他进程的内存了,通过这样我们岂不是就可以看到其他进程中"微信"或者是"网上银行"的信息,
这样的话,那我们的微信聊天记录或者是银行账户的信息就都被别人找到了,这是一个很危险的信号!显然这样是不可能的。
“文件/网络句柄”:
它们是所有的进程所共有的,例如打开同一个文件,去抢同一个网络的端口这样的操作是被允许的。
“线程”:
接下来,我们就要介绍一下我们的“线程”有关知识
2.2 线程(栈+PC+TLS)
2.2.1 栈:
我们通常都是说调用堆栈,其实这里的堆是没有含义的,调用堆栈就是调用栈的意思。
那么我们的栈里面有什么呢?
我们从主线程的入口main函数,会不断的进行函数调用,
每次调用的时候,会把所有的参数和返回地址压入到栈中。
2.2.2 PC:
Program Counter 程序计数器,操作系统真正运行的是一个个的线程,
而我们的进程只是它的一个容器。PC就是指向当前的指令,而这个指令是放在内存中。
每个线程都有一串自己的指针,去指向自己当前所在内存的指针。
计算机绝大部分是存储程序性的,说的就是我们的数据和程序是存储在同一片内存里的
这个内存中既有我们的数据变量又有我们的程序。所以我们的PC指针就是指向我们的内存的。
2.2.2.1 缓冲区溢出
例如我们经常听到一个漏洞:缓冲区溢出
这是什么意思呢?
例如:我们有个地方要输入用户名,本来是用来存数据的地方。
然后黑客把数据输入的特别长。这个长度超出了我们给数据存储的内存区,这时候跑到了
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
如果你觉得这些内容对你有帮助,可以扫码获取!!(备注Java获取)
![img](https://img-blog.csdnimg.cn/img_convert/4bdaa230af7290750f7b90b891586762.jpeg)
《MySql面试专题》
《MySql性能优化的21个最佳实践》
《MySQL高级知识笔记》
文中展示的资料包括:**《MySql思维导图》《MySql核心笔记》《MySql调优笔记》《MySql面试专题》《MySql性能优化的21个最佳实践》《MySq高级知识笔记》**如下图
关注我,点赞本文给更多有需要的人
《一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码》,点击传送门即可获取!
ySq高级知识笔记》**如下图
[外链图片转存中…(img-Xgaj7aQ0-1711872517202)]
关注我,点赞本文给更多有需要的人
《一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码》,点击传送门即可获取!