进程VS线程

进程:

进程VS线程

线程:是进程的一部分,每个操作系统可能同时有几十到几百个进程在运行,每个进程里有少到几个多到几十个甚至上百个线程在运行。

 

内存:逻辑内存,比如32位的系统有2的32次方,4G的寻址空间,则该系统的每个进程都有4G的内存空间可用,不一定都用。每个进程的内存都是互相独立的。

 

文件/网络句柄:是所有进程所共有的,比如说每个进程都可以打开同一个文件,同时去抢一个网络端口。

 

线程:

进程VS线程

栈:主线程的入口main函数不断进行函数调用,每次调用把参数和返回地址压到栈中去,每个函数的一些局部变量也会放到栈中。

 

PC:下一条执行指令的地址,操作系统运行的是线程,进程只是一个容器,指令本身放在内存中,每个线程都有PC指针指向自己那串代码的内存(计算机大多数是存储程序型的:数据和程序代码都在一片内存里)

所以漏洞——缓冲区溢出是指黑客把用户名输入得很长,跳出了给用户名分配的缓冲区,写到存取程序那一部分内存,通过这方法植入想要运行的代码。

防止方法:检测输入的用户名长度。

 

TLS:存放一些线程独有的数据。

 

所以进程和线程的一些区别有:

1、  进程因为不共享内存,所以交互比较麻烦,通过TCPIP端口实现交互是常用的方案(与系统相关性不大)

2、  线程通信比较简单,因为共享内存

3、  进程开销大,要分配内存

4、  线程开销小,只要分配栈和PC

 

关于线程一些说法:

1、线程死程序的多个顺序的流动态执行。

2、线程没有自己独立的地址空间。

3、线程不能独立执行,必须依存在应用程序中,由应用程序提供多个线程执行控制。