线程和进程是学习计算机必须要理解的两个概念。他们的关系亲密而微妙。虽然它们在某些方面相似,但它们是完全不同的物质。两者有什么区别?他们是什么关系?如何设置线程优先级排序?让我们跟随边肖了解更多。
线程和进程的区别
因为线程和进程都是描述CPU的工作时间,所以容易混淆,但是有很多区别。通常,进程是资源分配的最小单位,而线程是程序执行的最小单位。可以说谁也离不开谁,但又不能混淆。以下是边肖汇编的主要差异:
1.进程是资源分配的最小单位,线程是程序执行的最小单位(资源调度的最小单位)。
2.进程有自己独立的地址空。每次启动一个进程,系统都会给它分配地址空,建立数据表维护代码段、栈段和数据段。这个手术费用很高。
线程共享进程中的数据,使用同一个地址空,所以CPU切换一个线程的开销比进程小很多,创建一个线程的开销也比进程小很多。
3.线程之间的通信更加方便。同一进程中的线程共享全局变量、静态变量等数据,进程间的通信需要通过通信(IPC)的方式进行。然而,如何处理同步和互斥是编写多线程程序的难点。
4.但是多进程程序更健壮。多线程程序只要有一个线程死了,整个进程就死了,一个进程的死不会影响到另一个进程,因为进程有自己独立的地址空。
线程和进程之间的关系
1.一个进程可以有多个线程,但至少有一个线程;而线程只能在进程的地址空内活动。
2.资源分配给进程,同一进程的所有线程共享该进程的所有资源。
3.CPU是分配给线程的,也就是线程是真正在处理器上运行的。
4.线程在执行过程中需要协作和同步,不同进程的线程要使用消息通信来实现同步。
线程和进程的同步机制
1.互斥:采用互斥机制,只有拥有互斥对象的线程才能访问公共资源。因为只有一个互斥体,所以可以保证公共资源不会被多个线程同时访问。
2.信号量:它允许多个线程同时访问同一个资源,但是需要控制同时访问这个资源的线程的最大数量。
3.事件(信号):可以通过通知操作来维护多线程同步,方便实现多线程优先级的比较。
4.临界区(Critical section):临界区对象与互斥对象非常相似,只是允许在进程之间使用互斥,而临界区只限于同一进程的线程,但更节省资源,效率更高。
线程优先级排序
具有高优先级的线程不一定首先完成执行。优先级唯一的作用就是当两个线程都在等待的时候,会优先给优先级高的线程分配资源(造成优先级高的线程先执行的假象)。如果你的低优先级的线程已经开始执行了,那么高优先级的线程就不会去抢资源优先执行,而是等待系统分配资源。因为在主函数中是顺序执行的,如果你把优先级低的线程放在前面(更早开始执行),那么它的执行顺序就会在优先级高的线程前面,优先级只能体现在高并发上。