进程和线程的区别

前两天面试,被问到进程和线程的区别,由于是第一次面试软件测试岗,被问到这么“专业”的问题,有点惊讶,之后马上在脑海中努力回忆,还好能回答出7788。总算没给自己专业丢脸

1. 进程和线程的关系和区别

  • 进程是一个程序在其自身的地址空间中的一次执行活动,是资源申请、调度和独立运行的单位。线程是进程的一个单一的连续控制流程,一个进程可以拥有多个线程
  • 线程调度的两种方式:抢占式、非抢占式
  • 进程和线程的区别在于,线程没有独立的存储空间而是和所属进程中的其他线程共享一个存储空间
  • 一个线程只能属于一个进程,而一个进程可以有多个线程,但至少有一个线程。线程是操作系统可识别的最小执行和调度单位。
  • 资源分配给进程,同一进程的所有线程共享该进程的所有资源。 同一进程中的多个线程共享代码段(代码和常量),数据段(全局变量和静态变量),扩展段(堆存储)。但是每个线程拥有自己的栈段,栈段又叫运行时段,用来存放所有局部变量和临时变量。
  • 处理机分给线程,即真正在处理机上运行的是线程。
  • 线程在执行过程中,需要协作同步。不同进程的线程间要利用消息通信的办法实现同步。

2. 线程的状态

5个状态:新建、就绪、运行、阻塞/睡眠/等待、死亡

线程间的通信一般用wait()方法、notify()方法、和notifyAll()方法。他们都是object类的最终方法,每个类都默认拥有。

3.进程的状态

  • 运行状态:该状态下,进程正在CPU中执行,或者在运行队列(run queue)中等待运行
  • 停止状态:进程由于特定的信号(如SIGINT、SIGSTOP)而挂起就会处于该状态等待恢复信号。
  • 可中断的等待状态:该类进程处于拥塞状态,一旦达到某种条件,就会变为运行状态。同时该状态的进程也会由于接收到信号而被提前唤醒进入到运行状态。
  • 不可中断的等待状态:与“可中断的等待状态”类似,唯一不同的是处于该状态的进程对信号不做响应。不中断的等待状态最典型的例子就是进程等待磁盘I/O操作。
  • 僵尸状态:每个进程在结束后都会处于僵尸状态,等待父进程调用进而释放资源,处于该状态的进程已经结束,但是它的父进程还没有释放其系统资源。

4. 多线程的实现方法

多线程有三种实现方法:

  1. 继承Thread类
  2. 实现Runnable接口
    利用继承Thread类创建的多个线程,虽然执行的是相同的代码,但彼此相互独立,且各自拥有自己的资源没互不干扰。而通过实现Runnable接口可以使多个线程拥有同一资源。
  3. 实现Callable接口。接口中要覆盖的方法是 public call() 注意:此方法可以抛异常,而前两种不能 而且此方法可以有返回值

5. 使用多线程的优缺点

多线程的优点是:提高并发程度、提高效率;缺点是数据同步困难、开发调试难、任意使用多线程会降低效率(过犹不及)
多线程的不利方面:线程也是程序,所以线程需要占用内存,线程越多占用内存也越多;
多线程需要协调和管理,所以需要CPU时间跟踪线程;
线程之间对共享资源的访问会相互影响,必须解决竞用共享资源的问题;
线程太多会导致控制太复杂,最终可能造成很多Bug。

6. 线程的 run()和 start()有什么区别?

每个线程都是通过某个特定Thread对象所对应的方法run()来完成其操作的,方法run()称为线程体。通过调用Thread类的start()方法来启动一个线程。

start()方法来启动一个线程,真正实现了多线程运行。这时无需等待run方法体代码执行完毕,可以直接继续执行下面的代码; 这时此线程是处于就绪状态, 并没有运行。 然后通过此Thread类调用方法run()来完成其运行状态, 这里方法run()称为线程体,它包含了要执行的这个线程的内容, Run方法运行结束, 此线程终止。然后CPU再调度其它线程。

run()方法是在本线程里的,只是线程里的一个函数,而不是多线程的。 如果直接调用run(),其实就相当于是调用了一个普通函数而已,直接待用run()方法必须等待run()方法执行完毕才能执行下面的代码,所以执行路径还是只有一条,根本就没有线程的特征,所以在多线程执行时要使用start()方法而不是run()方法。

7.什么是单线程和多线程

单线程是先执行完A再执行B。
多线程是A执行一段,B执行一段。然后共同完成。

举个很常见的例子来加深理解:
你正在刷朋友圈,你老妈微信语音给你,你是不是可以边听(假装在听)老妈的唠叨其实是在刷朋友圈根本没听老妈唠叨什么。这就是多线程。
如果你只能听老妈的唠叨啥事都不能干不能退出聊天界面,就是单线程。

测试实习面试时被问及的可不止这一个问题,更多面试题和经历可以看一下我的这篇☞软件测试实习面试都问啥,实习相对来说要求没那么高,最重要就是自信点,准备充分点。然而秋招面试时除了会考察你知识面的广度还会考察你知识的深度,所以问的也会更深入问题也不同,需要的看这篇☞秋招面试常考知识点

  • 7
    点赞
  • 89
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值