专栏首页HelloCode开发者学习平台面试独门技巧,手刃"面试官"

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

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

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

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)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

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

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

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 多线程学习,从未如此容易

    从Apple官网可以看出,我们的主线程在iOS下是 1MB, 在OS X下是 8MB 。如果我们开辟的新的线程则是 512KB

    CC老师
  • iOS多线程研究(四)

    这里是一张高清无码大图,如果直接走下载,然后加载UI,整个程序就会有堵塞。 解决办法就是开启异步线程,进行下载,最后回到UI更新

    CC老师
  • Dart中的异步编程——Future、async和await

    首先Dart是一门单线程的语言,那么Dart对异步操作对支持,可以使我们在编写Dart程序时可以异步的来执行耗时操作。从而可以在等待一个操作完成的同时进行别的操...

    CC老师
  • iOS多线程

    进程是指系统中正在运行的一个应用程序。每个进程之间是独立的,每个进程均运行在其专用且受保护的内存空间内。

    hrscy
  • Java concurrency in practice笔记 02 03

    线程安全性的核心是正确性,正确性的含义是如果类的行为与其规范完全一致。因此当多个线程访问某个类时,类的行为始终是安全的,这个类就是线程安全的,...

    Dylan Liu
  • 学以致用C++设计模式 之 “观察者模式”

    看武侠片的时候,经常会看到某个倒霉蛋,不小心拉到了哪根线,然后就出现了漫天箭雨,运气不好就射成箭猪了,没被射死呢,又飞来一堆木头,没点本事就被击飞了,就算躲过一...

    看、未来
  • CAS机制是什么?

    因为多核CPU的存在,总是需要保障程序高性能的利用计算机的CPU资源,并要保障计算结果与预期的一致。因此常用的方式就是加锁方式。就是占用->占用结束->释放的...

    程序员_备忘录
  • PHP到底能不能实现多线程?

    前些天帮同事查一个问题,第一次接触到了 PHP 的多线程,原以为 PHP 普遍都是单线程模型,并不适合多线程领域,花些时间翻了几个多线程的项目源码之后,发现 P...

    A梦多啦A
  • 前台线程和后台线程总结

    .Net的公用语言运行时(Common Language Runtime,CLR)能区分两种不同类型的线程:前台线程和后台线程。

    wfaceboss
  • java基础(十一):多线程

    注意:优先级低只是意味着获得调度的概率低。并不是绝对先调用优先级高后调用优先级低的线程。

    Vincent-yuan

扫码关注云+社区

领取腾讯云代金券