一、进程与程序
程序:程序是计算机指令的集合,它以(.exe)文件的形式存储在磁盘上。
进程:进程则定义为一个正在运行的程序的实例,是一个程序在其自身的地址空间中的一次执行活动。
我们通过编译生成的.exe以文件的形式存在磁盘上,当运行这个.exe文件时就启动了这个程序的一个实例,该实例就是一个进程。一个程序可以对应多个进程。进程是资源申请、调度、独立运行的单位,因此它使用系统中的运行资源。
进程的组成:管理进程的内核对象和内存空间(如栈、堆等)。
内核对象是系统用来存放关于进程的统计信息的地方。内存空间包含了所有可执行模块或DLL模块的代码和数据,同时也包含了动态内存分配的空间。
二、线程
线程:线程是进程中的一个实体,是被系统独立调度和执行的基本单位。
线程总是在某个进程环境下创建的,线程创建时,总是从进程的内存空间内分配内存,从而生成线程栈。
线程的组成:线程的内核对象和线程栈
线程的内核对象也是系统用来存放线程统计信息的地方。线程栈是用来存放线程建立所产生的函数参数和局部变量。
三、进程与线程的区别与联系
(1)线程是进程的一段执行片段,进程是线程的执行环境。
(2)一个进程可以含有多个线程,但一个线程只能属于一个进程。
(3)进程从不执行任何代码,它只是线程的执行容器。线程用来执行代码,但是却与其他线程共享进程的内存空间,从而提高程序的运行速度。
(4)线程在执行过程中与进程还是有区别的。每个独立的线程有一个程序运行的入口、顺序执行序列和程序的出口。但是线程不能够独立执行,必须依存在应用程序中,由应用程序提供多个线程执行控制。
(5)线程的运行是在进程空间内,进程无法突破进程的边界存取其他进程内的存储空间;而线程属于同一个进程,所以同一进程的线程可以共享同一内存空间。
四、多进程可否代替多线程
不可以,一是对进程的创建来说,系统要为进程分配4GB的虚拟内存空间,所以它占的资源比较多。而对多线程程序来说,多线程是共享同一个进程的内存空间所以占用的资源比较少。二是当进程之间进行切换时,需要交换整个工作空间,而线程之间的切换只是执行环境的改变,因此效率比较高。