1.线程与进程概念性总结(初级)

来源:互联网 发布:网络攻防实验报告 编辑:程序博客网 时间:2024/06/06 09:47

线程特点:

1.线程共享进程数据,但也拥有自己的一部分数据

2.一切进程至少都有一个执行线程


fork和创建新线程的区别 :

fork:一个进程,包括代码、数据和分配给进程的资源。fork()函数通过系统调用创建一个与原来进程几乎完全相同的进程,也就是两个进程可以做完全相同的事,但如果初始参数或者传入的变量不同,两个进程也可以做不同的事。

  一个进程调用fork()函数后,系统先给新的进程分配资源,例如存储数据和代码的空间。然后把原来的进程的所有值都复制到新的新进程中,只有少数值与原来的进程的值不同。相当于克隆了一个自己。


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

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


线程的优点:

创建一个新线程的代价要比创建一个新进程小得多;

与进程之间的切换相比,线程之间的切换需要操作系统做的工作要少很多;

线程占用的资源要比进程少很多;

充分利用多处理器的可并行数量;

在等待慢速I/O操作结束的同时,程序可执行其他的计算任务;

计算密集型应用,为了能在多处理器系统上运行,将计算分解到多个线程中实现;

I/O密集型应用,为了提高性能,将I/O操作重叠线程可以同时等待不同的I/O操作


线程缺点:

1.性能损失

一个很少被外部事件阻塞的计算密集型线程往往无法与共它线程共享同一个处理器。如果计算密集型线程的数量比可用的处理器多,那么可能会有较大的性能损失,这里的性能损失指的是增加了额外的同步和调度开销而可用的资源不变

2.健壮性降低

编写多线程需要更全面更深入的考虑,在一个多线程程序里,因时间分配上的细微偏差或者因共享了不该共享的变量而造成不良影响的可能性是很大的,换句话说线程之间是缺乏保护的。

3.缺乏访问控制

进程是访问控制的基本粒度,在一个线程中调用某些OS函数会对整个进程造成影响

4.编程难度提高 

1用户级线程

用户级线程主要解决的是上下文切换的问题,它的调度算法调度过程全部由用户自行选择决定在运行时不需要特定的内核支持。在这里,操作系统往往会提供一个用户空间的线程库,该线程库提供了线程的创建调度撤销等功能,而内核仍然仅对进程进行管理。如果一个进程中的某一个线程调用了一个阻塞的系统调用函数,那么该进程包括该进程中的其他所有线程也同时被阻塞。这种用户级线程的主要缺点是在一个进程中的多个线程的调度中无法发挥多处理器的优势

(2)轻量级进程 

轻量级进程是内核支持的用户线程,是内核线程的一种抽象对象每个线程拥有一个或多个轻量级线程而每个轻量级线程分别被绑定在一个内核线程上

(3)内核线程 

这种线程允许不同进程中的线程按照同一相对优先调度方法进行调度,这样就可以发挥多处理器的并发优势

现在大多数系统都采用用户级线程与核心级线程并存的方法。一个用户级线程可以对应一个或几个核心级线程,也就是“一对一”或“多对一”模型。这样既可满足多处理机系统的需要,也可以最大限度地减少调度开销。

使用线程机制大大加快上下文切换速度而且节省很多资源。但是因为在用户态和内核态均要实现调度管理,所以会增加实现的复杂度和引起优先级翻转的可能性。一个多线程程序的同步设计与调试也会增加程序实现的难度。


0 0
原创粉丝点击