进程和线程的知识总结

来源:互联网 发布:刘欢和孙楠 知乎 编辑:程序博客网 时间:2024/05/29 13:00

1、当一个进程执行一个fork调用的时候,会创建出进程的一个新拷贝,新进程将拥有它自己的变量和PID。这个新进程的运行时间是独立的,它在执行时完全独立于创建它的进程


2、在进程里面创建一个新线程的时候,新的执行线程会拥有自己的堆栈(因此也就有了自己的局部变量),但要与它的创建者共享全局变量、文件描述符、信号处理器和当前的工作目录状态。

如下举例说明:

进程是资源竞争的基本单位


线程是程序执行的最小单位

所以,线程占用的资源要比线程少很多。

线程的优点:

1、创建一个新线程的代价要比创建一个新进程小得多
2、与进程之间的切换相比,线程之间的切换需要操作系统做的工作要少很多
3、线程占用的资源要比进程少很多
4、能充分利用多处理器的可并行数量
5、在等待慢速I/O操作结束的同时,程序可执行其他的计算任务
6、计算密集型应用,为了能在多处理器系统上运行,将计算分解到多个线程中实现
7、I/O密集型应用,为了提高性能,将I/O操作重叠。线程可以同时等待不同的I/O操作。

线程的缺点:

1、性能损失
一个很少被外部事件阻塞的计算密集型线程往往无法与共它线程共享同一个处理器。如果计算密集型线程的数量比可用的处理器多,那么可能会有较大的性能损失,这里的性能损失指的是增加了额外的同步和调度开销,而可用的资源不变。
2、健壮性降低
编写多线程需要更全面更深入的考虑,在一个多线程程序里,因时间分配上的细微偏差或者因共享了不该共享的变量而造成不良影响的可能性是很大的,换句话说线程之间是缺乏保护的。
3、缺乏访问控制
进程是访问控制的基本粒度,在一个线程中调用某些OS函数会对整个进程造成影响。
4、编程难度提高
编写与调试一个多线程程序比单线程程序困难得多


0 0