线程和进程的区别

如题所述

线程和进程是学习计算机时必须要弄明白的两个概念,它们的关系密切而微妙,虽然在某些方面有点点类似,但却是完全不同的两个物质,究竟它们有什么不同呢?它们的关系是怎么样的呢?线程优先级排序如何设置呢?一起跟随小编来详细了解一下。

线程和进程的区别

由于线程和进程都是对CPU工作时间段的描述,所以容易弄混,但其实差别很多,通常进程是资源分配的最小单位,而线程则是程序执行的最小单位,两者可以说谁都离不开谁,但是又不能混为一谈,下面就是小编整理的几大区别:

1、进程是资源分配的最小单位,线程是程序执行的最小单位(资源调度的最小单位)

2、进程有自己的独立地址空间,每启动一个进程,系统就会为它分配地址空间,建立数据表来维护代码段、堆栈段和数据段,这种操作非常昂贵。

而线程是共享进程中的数据的,使用相同的地址空间,因此CPU切换一个线程的花费远比进程要小很多,同时创建一个线程的开销也比进程要小很多。

3、线程之间的通信更方便,同一进程下的线程共享全局变量、静态变量等数据,而进程之间的通信需要以通信的方式(IPC)进行。不过如何处理好同步与互斥是编写多线程程序的难点。

4、但是多进程程序更健壮,多线程程序只要有一个线程死掉,整个进程也死掉了,而一个进程死掉并不会对另外一个进程造成影响,因为进程有自己独立的地址空间。

线程和进程的关系

1、一个进程可以有多个线程,但至少有一个线程;而一个线程只能在一个进程的地址空间内活动。

2、资源分配给进程,同一个进程的所有线程共享该进程所有资源。

3、CPU分配给线程,即真正在处理器运行的是线程。

4、线程在执行过程中需要协作同步,不同进程的线程间要利用消息通信的办法实现同步。

线程和进程的同步机制

1. 互斥量: 采用互斥对象机制,只有拥有互斥对象的线程才有访问公共资源的权限。因为互斥对象只有一个,所以可以保证公共资源不会被多个线程同时访问。

2. 信号量: 它允许同一时刻多个线程来访问同一资源,但是需要控制同一时刻访问此资源的最大线程数量。

3. 事件(信号):通过通知操作的方式来保持多线程同步,还可以方便实现多线程优先级的比较作。

4.临界区:临界区对象和互斥对象非常相似,只是互斥量允许在进程间使用,而临界区只限制与同一进程的各个线程之间使用,但是更节省资源,更有效率。

线程优先级排序

线程优先级高的并不一定会先执行完,优先级的唯一作用就是(两个线程同时)在等待的时候,会优先把资源分配给优先级高的线程(产生优先级高的线程先执行的错觉),如果你的(优先级低)线程已经开始执行了,那么后面优先级高的线程并不会抢夺资源优先执行,而是等待系统分配资源,由于在主函数中是顺序执行的,你把优先级低的线程放在前面(更早开始执行),那它的执行顺序就会在高优先级的前面,优先级一般在高并发中才能体现出来。

温馨提示:答案为网友推荐,仅供参考
相似回答