线程和进程的区别和联系

操作系统任何处理线程

    1.先描述一个进程(明确出一个进程上面的一些相关的属性)
       操作系统里面主要是通过c/c++来实现的,此处的描述其实就是用的c语言中的"结构体"(操作系统中描述进程的这个结构体称为"PCB"(process control block)进程控制块。

    2.再组织若干个进程(使用一些数据结构,把很多描述进程的信息放到一起,方便进行增删查改)

     典型的实现就是使用双向链表把每个进程的PCB给串起来。

1.“创建进程”就是先创建出PCB,然后把PCB加到双向链表中。

2.“销毁进程”就是找到链表上的PCB,从链表中删除。

3.“查看任务管理器”就是遍历链表

PCB中的一些属性

1.pid

pid(进程id)为进程的身份标识

2.内存指针

指向该进程持有的一些重要数据在内存中的位置。
重要的数据包括:a)执行的指令都有啥 b)这些指令依赖的数据都是啥。
内存是操作系统给该进程分配资源的一部分。

3.文件描述符

程序在运行的过程中,经常要和文件打交道(文件是在磁盘上),进程每次打开一个文件,就会在文件描述表上多增加一项(这个文件描述符表可以视为一个数组,里面的每一个元素是一个结构体,就对应一个文件的相关信息),这个文件描述表的下标就称为文件描述符.

一个进程只有一启动,不管你代码中是否写了打开/操作文件的代码 ,都会默认的打开三个文件。   1.标准输入文件                                                                                                                                  2.标准输出文件                                                                                                                                  3.标准错误文件

什么是进程调度?包含了那些属性?

用通俗的话来将就是:一个系统同一时间执行了很多任务,这件事就是“进程调度”(进程调度就是操作系统在考虑CPU资源如何给各个进程分配)

A.有钱的     B.长的帅    C.有钱又帅。我们需要合理的管理时间,避免同一时刻三个人碰面

 2.1状态

      这个状态描述了当前这个进程接下来应该怎么调整                                                                             1.就绪状态:随时可以去CPU上执行                                                                                                 2.阻塞状态/睡眠状态,暂时不可以去CPU上执行

2.2优先级

     先给谁分配时间,后给谁分配时间,以及分给谁多谁少

2.3记账信息

     统计每一个进程,都执行了多久,分别都执行了那些指令,分别都排队等了多久——给进程调度提供了指导依据。

2.4上下文

    表示上次进程被调度出CPU的时候,当时程序的执行 状态条件下,下次进程上的CPU的时候就可以恢复之前状态然后继续往下执行。                                                                                                   进程被调度出CPU之前,要先把CPU中所有的寄存器的数据都给保存到内存中相当于存档。            下次进程再被调度到CPU的 时候,就可以从刚才的内存中恢复到这些数据到寄存器中,相当于读档。

并行和并发

并行:微观上,两个CPU核心,同时执行两个任务的代码                                                                并发:微观上,一个CPU核心,先执行一会任务1,再执行一会任务2,再执行一个任务3.....再执行任务1,只要切换的足够快,宏观上看起来就好像这么多任务同时在进行。

进程的独立性是什么

由于操作系统上,同时运行着很多个进程,如果某个进程出现了BUG,进程崩溃是否会影响其他进程呢?

      进程的独立性保证了如果出现bug不会影响到其他进程,能够做到这一点就是"进程的独立性”来保证的,并且依赖了“虚拟地址空间”

进程间的通信

操作系统中,提供的公共空间很多种,并且各有各的特点,有的存储空间大,有的小,有的速度快,有的速度慢,操作系统中提供了多种这样的进程间的通信机制                                                   主要使用的进程通信方式:                                                                                                                1.文件操作                                                                                                                                           2.网络操作

线程

线程是什么?

线程是进程的一个执行路径,一个进程中至少有一个线程,进程中的多个线程共享进程的资源。

举个例子:进程是一个工厂,而线程就是工厂的生产线,一个工厂里面可以有一个生产线和多个生产线

线程在 并发编程上 和进程的区别

通过多进程,我们可以实现并发编程,但是有一个问题,如果频繁的创建/销毁进程,这个事情成本是比较高,如果需要频繁的调度进程,这个事情成本也比较高。

如何解决这个问题呢?

1.进程池

进程池虽然能够解决上述问题,提高效率,同时也有问题,池子里的闲置进程,不适用的时候也在消耗系统里面的资源,消耗的系统资源太多了

2.使用多线程来实现并发编程

线程比进程更轻量,每个进程可以执行一个任务,每个线程也能执行一个任务(执行一段代码),也能过并发编程。

 创建线程的成本比创建进程要低得多                                                                                                 销毁线程的成本比销毁进程要低得多                                                                                                 调度线程的成本比调度进程要低得多

为什么线程比进程更轻量呢?进程重在哪?

进程重在资源申请和释放(在仓库里找东西),线程里包含进程中的,一个进程中的多个线程共用一份资源(同一份内存+文件)

经典面试题

谈谈进程和线程的区别和联系

1.进程包含线程,一个进程里可以有一个线程或者很多线程                                                                 2.进程和线程都是为了处理并发编程这样的场景                                                                                但是进程创建和释放的时候效率 低,相比之下,线程更轻量,创建和释放效率更好                                 3.操作系统创建进程是给进程分配资源,进程是操作分配资源的基本单位,操作系统创建的线程是在CPU上调度执行,线程是操作系统调度执行的基本单位                                                                        4.进程具有独立性,每个进程有各自的虚拟地址空间,一个进程挂了不会影响其他进程,同一个进程中的多个线程共用同一个内存空间,一个线程挂了很可能会影响其他的线程,甚至导致整个进程崩溃.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值