进程与线程的区别

线程是轻量级的进程;
进程创建一个新线程时,新的执行线程将拥有自己的栈(因此也有自己的局部变量),但它与创建者共享全局变量、文件描述符、信号处理函数和当前目录状态。

进程:有独立0-4G虚拟地址空间,拥有PCB(PCB Process Control Block)进程控制块
线程:也有PCB,但没有独立的地址空间(共享的)

线程是最小的执行单位,进程是最小分配资源单位。

线程的优缺点:
优点:1、提高程序并发性;2、开销小3、数据通信、共享数据方便
缺点:1、库函数不稳定;调试、编写困难、gdb不支持;3、对信号支持不好。

理解进程与线程:
进程与线程的区别
同一进程中线程之间的区别:
进程与线程的区别
什么时候用进程或线程?
1、需要频繁创建销毁的优先使用线程;因为对进程来说创建和销毁一个进程代价是很大的。

2、线程的切换速度快,所以在需要大量计算,切换频繁时用线程,还有耗时的操作使用线程可提高应用程序的响应

3、因为对CPU系统的效率使用上线程更占优,所以可能要发展到多机分布的用进程,多核分布用线程;

4、并行操作时使用线程,如C/S架构的服务器端并发线程响应用户的请求;

5、需要更稳定安全时,适合选择进程;需要速度时,选择线程更好。

补充:
内核空间和用户空间:
现在操作系统都采用虚拟寻址,处理器先产生一个虚拟地址,通过地址翻译成物理地址(内存的地址),再通过总线的传递,最后处理器拿到某个物理地址返回的字节。

对32位操作系统而言,它的寻址空间(虚拟存储空间)为4G(2的32次方)。操作系统的核心是内核,独立于普通的应用程序,可以访问受保护的内存空间,也有访问底层硬件设备的所有权限。为了保证用户进程不能直接操作内核(kernel),保证内核的安全,操心系统将虚拟空间划分为两部分,一部分为内核空间,一部分为用户空间。针对linux操作系统而言,将最高的1G字节(从虚拟地址0xC0000000到0xFFFFFFFF),供内核使用,称为内核空间,而将较低的3G字节(从虚拟地址0x00000000到0xBFFFFFFF),供各个进程使用,称为用户空间。