面试独门技巧,手刃"面试官"

秋招在即,开发者可以开始着手准备利用碎片的时间累积更多的面试题.厚积薄发!

第一个面试题:线程和进程的关系和区别

1:线程定义

  • 线程是进程的基本执行单元,一个进程的所有任务都在线程中执行
  • 进程要想执行任务,必须得有线程,进程至少要有一条线程
  • 程序启动会默认开启一条线程,这条线程被称为主线程或 UI 线程

2:进程定义

  • 进程是指在系统中正在运行的一个应用程序
  • 每个进程之间是独立的,每个进程均运行在其专用的且受保护的内存空间内
  • 通过“活动监视器”可以查看 Mac 系统中所开启的进程

3:进程与线程的区别

  • 地址空间:同一进程的线程共享本进程的地址空间,而进程之间则是独立的地址空间。
  • 资源拥有:同一进程内的线程共享本进程的资源如内存、I/O、cpu等,但是进程之间的资源是独立的。
  • 一个进程崩溃后,在保护模式下不会对其他进程产生影响,但是一个线程崩溃整个进程都死掉。所以多进程要比多线程健壮。
  • 进程切换时,消耗的资源大,效率高。所以涉及到频繁的切换时,使用线程要好于进程。同样如果要求同时进行并且又要共享某些变量的并发操作,只能用线程不能用进程
  • 执行过程:每个独立的进程有一个程序运行的入口、顺序执行序列和程序入口。但是线程不能独立执行,必须依存在应用程序中,由应用程序提供多个线程执行控制。
  • 线程是处理器调度的基本单位,但是进程不是。

第二个面试题:多线程的意义

这个代码主要放在主线程,就会严重影响程序的性能,造成堵塞,影响用户体验.这个时候我们的多线程就发挥它的作用了

把我们的耗时操作放到我们的子线程,这样主线程继续执行他们的任务(尤其UI)

第三个面试题:多线程的原理

  • 3.1 单核: CPU(Central Processing Unit)中央处理器 主频越高越好
  • 3.2 多线程:同一时刻,一个CPU只能处理一条线程,但CPU可以在多条线程之间快速的切换,只要切换的足够快,就造成了多线程并发执行的现象。多线程是通过提高资源使用率来提高系统总体的效率。我们运用多线程,是为了将耗时操作放在后台执行。 (这里有一个误区:多线程就是同一时间多个任务同时进行)
  • 3.3 时间片的概念:CPU在多个任务直接进行快速的切换,这个时间间隔就是时间片
    • 每个线程被调度的次数会降低,线程的执行效率降低
    • CPU 调度线程的时间足够快,就造成了多线程的“同时”执行的效果
    • 单核CPU)同一时间,CPU 只能处理 1 个线程 ( 换言之,同一时间只有 1 个线程在执行)
    • 多线程同时执行:
    • 是 CPU 快速的在多个线程之间的切换
    • 如果线程数非常多 CPU 会在 N 个线程之间切换,消耗大量的 CPU 资源

6.多线程优/缺点

  • 优点
    • 能适当提高程序的执行效率
    • 能适当提高资源的利用率(CPU,内存)
    • 线程上的任务执行完成后,线程会自动销毁
  • 缺点
    • 开启线程需要占用一定的内存空间(默认情况下,每一个线程都占 512 KB)
    • 如果开启大量的线程,会占用大量的内存空间,降低程序的性能
    • 线程越多,CPU 在调用线程上的开销就越大
    • 程序设计更加复杂,比如线程间的通信、多线程的数据共享

原文发布于微信公众号 - HelloCode开发者学习平台(HellCode_CC)

原文发表时间:2018-08-25

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

扫码关注云+社区

领取腾讯云代金券