首页 理论教育 嵌入式Linux编程入门:线程和进程的关系

嵌入式Linux编程入门:线程和进程的关系

时间:2023-10-31 理论教育 版权反馈
【摘要】:线程和进程十分相似,不同的只是线程比进程小,每个线程所占用的CPU时间是由系统分配的。在串行程序基础上引入线程和进程,是为了提高程序的并发度,从而提高程序运行的效率和响应时间。线程和进程二者之间的关系如下。在多线程情况下,同一进程内的线程共享进程的地址空间。线程可以被看做是在进程内部执行的指定序列。进程中的线程是动态的对象,代表了进程指令的执行过程。

嵌入式Linux编程入门:线程和进程的关系

根据操作系统的定义,进程是系统资源管理的最小单位,线程是计算机中程序执行的最小单位,运行时占用的系统资源较少,一个进程可以拥有多个线程。线程和进程十分相似,不同的只是线程比进程小,每个线程所占用的CPU时间是由系统分配的。也可以认为,线程是操作系统分配CPU时间的基本单位。进程可以同时使用多个CPU来执行各个线程,达到最大程度的并行,以提高效率。一个进程至少需要一个线程作为它的指令执行体。从用户的角度看,多个线程是同时执行的。从操作系统的角度看,各个线程是交替执行的。系统不停地在各个线程之间切换,每个线程只有在系统分配的时间内才能获得CPU的控制权。相对进程而言,线程更接近于执行体,它可以与同进程中的其他线程共享数据,且拥有自己的栈,拥有独立的执行序列。在串行程序基础上引入线程和进程,是为了提高程序的并发度,从而提高程序运行的效率和响应时间。

如果在CPU多核的主机上,多个线程是可以同时运行的。

Linux是支持多线程的,在一个进程内生成多个线程。一个进程可以拥有一个或多个线程。线程和进程二者之间的关系如下。

1)首先,线程采用了多个线程可共享资源的设计思想。在多进程情况下,每个进程都有自己独立的地址空间。在多线程情况下,同一进程内的线程共享进程的地址空间。线程和进程的最大区别在于线程完全共享相同的地址空间,运行在同一地址上。

2)其次,由于进程地址空间独立而线程共享地址空间,所以从一个线程切换到另一个线程所花费的代价比进程低。

3)再次,进程本身的信息在内存中占用的空间比线程大。因此,线程更能充分地利用内存。线程可以被看做是在进程内部执行的指定序列。(www.xing528.com)

4)最后,线程间的通信比进程间的通信更加方便和省时。进程间的数据空间相互独立,彼此通信要以专门的通信方式进行,通信时必须经过操作系统,而同一进程的多个线程共享数据空间。一个线程的数据可以直接提供给其他线程使用,不必经过操作系统。

线程机制支持并发程序设计技术,在多处理器上能保证并行处理。而在Linux中实现线程很特别。Linux把所有的线程都当做进程处理。

Linux下的线程看起来就像普通进程(只是该进程和其他进程共享资源,如地址空间等)。上述机制与Microsoft Windows或Sun Solaris实现差异很大。这些系统提供专门支持线程的机制(轻量级进程)。

一个进程的组成实体可以分为两大部分:线程集和资源集。进程中的线程是动态的对象,代表了进程指令的执行过程。资源,包括地址空间、打开的文件和用户信息等,由进程内的线程共享。线程有自己的私有数据:程序计数器,栈空间以及寄存器。但是,由于各线程共享进程的地址空间,可能会导致竞争,因此,对某一块有多个线程要访问的数据需要一些同步技术。

系统支持POSIX多线程接口,称为pthread(Posix Thread)。编写Linux下的多线程应用程序需要使用头文件pthread.h,连接时需要使用库libpthread.a。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈