进程与线程

来源:互联网 发布:格式工厂mac版怎么用 编辑:程序博客网 时间:2024/06/06 00:06

什么是进程(Process):普通的解释就是,进程是程序的一次执行,而什么是线程(Thread),线程可以理解为进程中的执行的一段程序片段。

在一个多任务环境中下面的概念可以帮助我们理解两者间的差别:

      进程间是独立的,这表现在内存空间,上下文环境;线程运行在进程空间内。一般来讲(不使用特殊技术)进程是无法突破进程边界存取其他进程内的存储空间;而线程由于处于进程空间内,所以同一进程所产生的线程共享同一内存空间。 
同一进程中的两段代码不能够同时执行,除非引入线程。

线程是属于进程的,当进程退出时该进程所产生的线程都会被强制退出并清除。
线程占用的资源要少于进程所占用的资源。
进程和线程都可以有优先级。
在线程系统中进程也是一个线程。可以将进程理解为一个程序的第一个线程。

 

多线程共存于应用程序中是现代操作系统中的基本特征和重要标志。用过UNIX操作系统的读者知道进程,在UNIX操作系统中,每个应用程序的执行都在操作系统内核中登记一个进程标志,操作系统根据分配的标志对应用程序的执行进行调度和系统资源分配,但进程和线程有什么区别呢?
进程和线程都是由操作系统所体会的程序运行的基本单元,系统利用该基本单元实现系统对应用的并发性。

进程和线程的区别在于:
线程的划分尺度小于进程,使得多线程程序的并发性高。
另外,进程在执行过程中拥有独立的内存单元,而多个线程共享内存,从而极大地提高了程序的运行效率。
线程在执行过程中与进程还是有区别的。每个独立的线程有一个程序运行的入口、顺序执行序列和程序的出口。但是线程不能够独立执行,必须依存在应用程序中,由应用程序提供多个线程执行控制。
从逻辑角度来看,多线程的意义在于一个应用程序中,有多个执行部分可以同时执行。但操作系统并没有将多个线程看做多个独立的应用,来实现进程的调度和管理以及资源分配。这就是进程和线程的重要区别。
进程(Process)是最初定义在Unix等多用户、多任务操作系统环境下用于表示应用程序在内存环境中基本执行单元的概念。以Unix操作系统为例, 进程是Unix操作系统环境中的基本成分、是系统资源分配的基本单位。Unix操作系统中完成的几乎所有用户管理和资源分配等工作都是通过操作系统对应用 程序进程的控制来实现的。

 

C、C++、Java等语言编写的源程序经相应的编译器编译成可执行文件后,提交给计算机处理器运行。这时,处在可执行状态中的应用程序称为进程。从用户 角度来看,进程是应用程序的一个执行过程。从操作系统核心角度来看,进程代表的是操作系统分配的内存、CPU时间片等资源的基本单位,是为正在运行的程序提供的运行环境。进程与应用程序的区别在于应用程序作为一个静态文件存储在计算机系统的硬盘等存储空间中,而进程则是处于动态条件下由操作系统维护的系统资源管理实体。多任务环境下应用程序进程的主要特点包括:

●进程在执行过程中有内存单元的初始入口点,并且进程存活过程中始终拥有独立的内存地址空间;
●进程的生存期状态包括创建、就绪、运行、阻塞和死亡等类型;
●从应用程序进程在执行过程中向CPU发出的运行指令形式不同,可以将进程的状态分为用户态和核心态。处于用户态下的进程执行的是应用程序指令、处于核心态下的应用程序进程执行的是操作系统指令。

在Unix操作系统启动过程中,系统自动创建swapper、init等系统进程,用于管理内存资源以及对用户进程进行调度等。在Unix环境下无论是由操作系统创建的进程还要由应用程序执行创建的进程,均拥有唯一的进程标识(PID)。

 

为什么要引入进程:进程可以提高系统的并发性,提高CPU的使用率,从而提高程序的性能.在以前单道操作系统中,一次只执行一个程序,这样管起来简单,但执行效率很低,资源得不到充分的利用,所以,后来多道操作系统出现了,由于多道操作系统一次并发执行很多程序,但管理起来非常麻烦,就这样,进程就被提出来,进程是一个程序动态执行表现,而且进程里包含了程序的资源,并管理程序怎么去使用资源.

进程是在一个程序运行时建立起来的,进程是动态的,而程序是静态的,可以说进程是程序的一种动态表现形式.

进程分为用户进程和系统进程,可以按字面理解,系统进程就是为了完成系统本身功能,而建立的进程,用户进程为执行特定的用户程序而建立起来的进程.

进程的管理和控制信息都放在进程控制模块PCB(Process Control Block),


为什么要引入线程:进程与进程之间的通信是十分慢的,因为进程管理分配很多资源,所以转换起来很慢,就这样,线程产生了,他是比进程更小的单位, 一个进程中只要有一个或多个线程,每个线程之间的通信相对进程而言,则快了很多,因为线程只涉及到CPU的资源分配.一个进程里的线程是可以相互通信的. 但不同进程之间的线程是不能相互通信的.

线程在程序中的作用:提高程序的并发性,一个程序如果只有一个线程的话,那么整个程序只能顺序执行,如果程序中有两个方法,想同时执行(比如银行 取款,很多人同时取),这样,一个线程是解决不了的,因此引入了多线程,每个人调用取钱的方法都放到不同的线程中,这样就可以虚拟的同时取款了,其实是 CPU时间轮片的原因,因为CPU速度非常快,所以给人印象上是同时进行的.线程还有一个优点就是,提高程序的CPU利用率,从而提高程序的运行速度.

原创粉丝点击