简而言之,一个程序至少有一个进程,一个进程至少有一个线程.
线程是进程的一个实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位.线程自己基本上不拥有系统资源,只拥有一点在运行中必不可少的资源(如程序计数器,一组寄存器和栈),但是它可与同属一个进程的其他的线程共享进程所拥有的全部资源.
一个线程可以创建和撤销另一个线程;同一个进程中的多个线程之间可以并发执行.
线程的引入:例如,有一个Web服务器要进程的方式并发地处理来自不同用户的网页访问请求的话,可以创建父进程和多个子进程的方式来进行处理,但是创建一个进程要花费较大的系统开销和占用较多的资源。除外,这些不同的用户子进程在执行的时候涉及到进程上下文切换,上下文切换是一个复杂的过程。所以,为了减少进程切换和创建的开销,提高执行效率和节省资源,人们在操作系统中引入了"线程(thread)"的概念。
进程的作用和定义:进程是为了提高CPU的执行效率,减少因为程序等待带来的CPU空转以及其他计算机软硬件资源的浪费而提出来的。进程是为了完成用户任务所需要的程序的一次执行过程和为其分配资源的一个基本单位,是一个具有独立功能的程序段对某个数据集的一次执行活动。
进程与程序的区别:
程序是一组指令的集合,它是静态的实体,没有执行的含义。而进程是一个动态的实体,有自己的生命周期。一般说来,一个进程肯定与一个程序相对应,并且只有一个,但是一个程序可以有多个进程,或者一个进程都没有。除此之外,进程还有并发性和交往性。简单地说,进程是程序的一部分,程序运行的时候会产生进程。
总结:
线程是进程的一部分,进程是程序的一部分。
程序和exe,dll之间的关系:
EXE就是可执行文件,你可要双击它, 它就可以运行,而DLL是一个动态链接库文件,就是说,它不可以自己运行,它是须要一个程序的其它功能运行的时候,它才能运行,打个比方,如果你的QQ要升级,那QQ里面有关升级的DLL文件它就会运行.
EXE是带有程序入口(Main)的能被终端用户直接执行的应用程序,随着它的启动系统会产生一个相应的进程。
DLL是动态链接库,不包含程序执行入口,不能被终端用户直接执行,本身需要附加到现有的进程中才可以运行。
但两者都是基于PE格式,运行时由磁盘中的映像载入被调用者的内存或者共享空间中执行,包含程序的数据信息,只是EXE还包括程序的代码信息。
DLL可被多个程序共用,而EXE则不行,只能单独执行
上面是转载来自别人的文章,感觉很好,转载过来,但是后来又人评论说没有说服务的概念,那我就补充下服务的概念,我所说的服务就解释宏观的服务,不是解释微服务,这些对外提供功能的程序,如果是对外提供功能服务的程序,这种服务一般包含1到多个进程。而我想说的服务,就是windows下我们在任务管理器里看到的服务,服务包括手动启动,和自动启动等方式,服务的概念是windows下所特有的,linux下是没有服务的概念的。而说到服务就不得不说,看门狗的概念,看门狗通常是个exe程序,这个程序非常简单,就是定时检查配置文件中配置的exe是否正常运行,如果不正常运行,就把程序拉起来,一般我们是把看门狗exe在windows下注册成一个服务,然后设置服务自启动,这样当windows操作系统启动以后就会自动的把服务拉起来,因为狗被注册成服务了。所以服务启动后狗就会被拉起,然后狗就会看护自己配置文件中配置的进程了。对于linux文件,有启动文件,我们如果想开机启动执行哪个程序,就在启动文件里,把执行的文件执行就可以了,也就达到了开机自启动的目的。