程序&进程&线程

程序是静态实体,本身没有任何运行的含义,只是一组指令的有序集合,只有运行在进程中才有意义,一段程序的运行至少一个进程,一个进程至少有一个线程
进程:是一个动态实体,反应的是一段程序在一定数据集上运行的全部动态过程,进程需要分配系统资源。进程一般包括指令集和系统资源,其中指令集就是程序代码,系统资源就是指cpu、内存以及I/O等
线程:是进程的一个执行流,线程不能分配系统资源,它是进程的一部分,比进程更小的独立运行的单位

线程的优点:减小了程序并发执行时的开销,提高了操作系统的并发性能,

线程的缺点:线程没有自己的系统资源,只拥有在运行时必不可少的资源,但同一进程的各线程可以共享进程所拥有的系统资源

进程与线程的区别与联系 

 ① 进程是系统进行资源分配和调度的最小的独立单元,拥有独立的内存单元,有自己的运行周期,因创建的而产生,因调度而运行,因等待资源或事件而被处于等待状态,因完成任务而被撤销

② 线程包含在进程中,是进程的的一个实体,是cpu进行运算调度的最小单位,一个线程只属于一个进程,但是一个进程会包含至少一个线程,由于线程的划分尺度小于进程,多线程共享内存,上下文的切换消耗更少,可以极大提高程序的运行效率,所以,多线程程序的并发性更高

③ 线程中执行时一般都要进行同步和互斥,因为他们共享同一进程的资源

④ 进程拥有独立的内存单元,一个地址崩溃后,在保护模式下不会对其他进程产生影响。线程有自己的程序技术区、虚拟机栈和本地方法栈,进程内多线程共享内存,一个线程崩溃会影响整个进程终止。所以,虽然多进程的程序要比多线程的程序更健壮,但是在进程切换时,耗费资源较大,效率差

⑤ 进程的创建调用fork或者vfork,而线程的创建调用pthead_create,进程结束后它拥有的所有线程都将销毁,而线程的结束不会影响同个进程中的其他线程的结束。

⑥ 线程是轻量级的进程,它的创建和销毁所需要的时间比进程小很多,所有操作系统中的执行功能都是创建线程去完成的。

⑦ 从逻辑角度来看,多线程的意义在于一个应用程序中,有多个执行部分可以同时执行。但操作系统并没有将多个线程看做多个独立的应用,来实现进程的调度和管理以及资源分配。这就是进程和线程的重要区别

⑧ 进程具有独立的系统资源,每次创建都需要进行资源的分配与调度,具有较大的系统开销,但是线程是基于进程而存在的,单个进程内的线程是内存共享的,避免了进程IPC引入新的复杂度,所以线程间的通信也更加简单,另,线程的创建和切换的系统开销都比进程小,所以一定程度上会比多进程更高效

进程的三态模型

 

就绪:进程已分配到除cpu之外的所有必要资源之后,只需要再获得CPU便可立即执行

执行:已获取CPU资源,正在执行

阻塞:正在执行的进程由于发生某事件(I/O请求、申请缓冲区失败等)暂时无法继续执行的状态

 

守护进程、僵尸进程和孤儿进程

守护进程:指在后台运行的,没有控制终端与之相连的进程。它独立于控制终端,周期性地执行某种任务

孤儿进程:如果父进程先退出,子进程还没退出,那么子进程的父进程将变为init进程。(注:任何一个进程都必须有父进程)。而还在运行的子进程将成为孤儿进程,孤儿进程将被init进程(进程号为1)所收养,并由init进程对它们完成状态收集工作

僵尸进程:如果子进程先退出,父进程还没退出,那么子进程必须等到父进程捕获到了子进程的退出状态才真正结束,否则这个时候子进程就成为僵尸进程,设置僵尸进程的目的是维护子进程的信息,以便父进程在以后某个时候获取

 

并发和并行

并发就是在一段时间内,多个任务都会被处理;但在某一时刻,只有一个任务在执行。单核处理器做到的并发,其实是利用时间片的轮转,例如有两个进程A和B,A运行一个时间片之后,切换到B,B运行一个时间片之后又切换到A。因为切换速度足够快,所以宏观上表现为在一段时间内能同时运行多个程序。

并行就是在同一时刻,有多个任务在执行。这个需要多核处理器才能完成,在微观上就能同时执行多条指令,不同的程序被放到不同的处理器上运行,这个是物理上的多个进程同时进行

 

posted @ 2022-05-11 13:24  蚂蚁力量  阅读(57)  评论(0编辑  收藏  举报