进程与线程小别

进程与线程小别

举个小栗子:当你每打开一个app时你开启了一个新的进程,而在使用app时你每点击打开一个小功能或者小的选项,实际上就是打开一个小的线程。
1、程序、进程与线程的基本定义
1.1 程序
程序是指令、数据及其组织形式的描述。我们用高级语言编写的程序在编译后实际上就是一串指令集,而这些指令集完美的将人类的思维逻辑呈现在了计算机上。而进程则是程序的实体,是程序在计算机上的动态表现。
1.2 进程
进程是计算机系统进行资源分配和调度的基本单位,每一个可执行的程序至少包含一个进程,而一个进程至少包含一个线程(即我们常说的主线程(main))
1.3 线程
线程是进程的基本单位,是计算机系统的最小调度单位。一个线程指的是进程中一个单一顺序的控制流,一个进程可以并发控制多个线程,而每个线程可以执行不同的任务。
1.4 小结
程序:程序是指令、数据及其组织结构的描述。
进程:进程是程序运行的动态实体及其表现形式,是OS进行资源分配和调度的最小单位,也是基本单位。
线程:线程是OS的最小调度单位,是系统分配处理器时间资源的基本单元。
三者关系:一个程序里至少包含一个进程,一个进程里至少包含一个线程。
二、深入理解

图片来源为网上

2.1 进程(线程+“内存”+文件/网络句柄)
“内存”:此处的“内存”并非实际的物理内存,而是逻辑内存(内存的寻址空间)。每个进程的“内存”是相互独立的,否则我们把寻址指针一改,就指向其他进程的“内存”了,通过这样我们岂不是就可以看到其他进程中"微信"或者是"网上银行"的信息, 这样的话,那我们的微信聊天记录或者是银行账户的信息就都被别人找到了,这是一个很危险的信号!显然这样是不可能的。
“文件/网络句柄”:它们是所有的进程所共有的,例如打开同一个文件,去抢同一个网络的端口这样的操作是被允许的。
2.2 线程(栈+PC+TLS)
2.2.1 栈
程序在执行的过程中会不断的将数据存入栈中和从栈中取出,比如在函数调用时,首先会将调用函数的数据及指针存入栈中,然后才进入被调用函数,当被调用函数执行结束后,OS会执行弹栈操作,取出调用函数的指针,进而返回调用函数接着往下执行。而我们常说的调用堆栈,在这里实际上堆是没有含义的,所以实际上就是调用栈的意思.
2.2.2 PC
PC即程序计数器(program counter),程序经过编译后在计算机内是一串串指令集,而这些指令存在操作系统内存中,而PC则是指向这些指令集所在的内存的指针.操作系统实际上运行的是线程,而进程则是多个线程的容器,每个线程都有一个属于自己的指针去指向自己当前所在的内存,计算机绝大部分是存储程序性的,说的就是我们的数据和程序是存储在同一片内存里的 这个内存中既有我们的数据变量又有我们的程序。所以我们的PC指针就是指向我们的内存的。
2.2.2.1 缓冲区溢出
例如我们经常听到一个漏洞:缓冲区溢出 这是什么意思呢?计算机程序一般都会使用到一些内存,这些内存或是程序内部使用,或是存放用户的输入数据,这样的内存一般称作缓冲区。溢出是指盛放的东西超出容器容量而溢出来了,在计算机程序中,就是数据使用到了被分配内存空间之外的内存空间。而缓冲区溢出,简单的说就是计算机对接收的输入数据没有进行有效的检测(理想的情况是程序检查数据长度并不允许输入超过缓冲区长度的字符),向缓冲区内填充数据时超过了缓冲区本身的容量,而导致数据溢出到被分配空间之外的内存空间,使得溢出的数据覆盖了其他内存空间的数据.比如:黑客常常通过在用户名输入的输入框中输入过长的用户名,直至超出缓冲区,若是输入框中未作输入数据长度限制,则会出现缓冲区溢出,占用其他的内存,进而植入他们的代码或者程序,
2.3 TLS(thread local storage)
每个进程都有一个独立的属于自己的存储空间,同理,每个线程也有输入自己的存储空间.每个线程都有一个属于自己的指针,该指针指向线程自己的存储空间,该存储空间用于存储线程自己的数据.不同进程的存储空间是相互独立的,不同进程之间不可以共享存储空间,进程间通信往往需要TCP/IP端口来实现,而线程则较为简单,因为一个进程可以包含多个线程,所以同一进程的不同线程之间实际上是可以共享存储空间的,故而同一进程的不同线程可以通过共享存储空间的形式进行通信.
2.4 小结
1.进程要分配一大部分的内存,而线程只需要分配一部分栈就可以了.
2.一个程序至少有一个进程,一个进程至少有一个线程.
3.进程是资源分配的最小单位,线程是程序执行的最小单位。
4.一个线程可以创建和撤销另一个线程,同一个进程中的多个线程之间可以并发执行.
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值