Unity面试和总结分析(二)——编程基础之进程、线程、协程

从这一篇开始,仔细写写具体面试题目。
Unity的相关知识一般分为三大类型:编程基础、Unity功能、Unity相关的图形学,因此面试题也可以大致分成这三类。
这一篇先总结一下这段时间面试遇到的编程基础题目。
在这段时间遇到的所有笔试中,编程基础全无一例外都出现了,而其中出现最多的是排序算法,由于Unity做网游的项目也非常多,因此网络编程也会偶尔出现一些,此外还有一些考验细节性的题目,如果平时注意过就能做出来,否则可能完全没有想过。


先从一些理论基础开始吧。

线程、协程、进程有什么区别?

分析:进程、线程和协程的概念是程序运行的一个基本概念,大家虽然都知道有这些内容,但实际了解的并不透彻,很容易被语言或者平台限制,我在面试时就犯了这个错误,把协程局限在了Unity平台中。

1.要知道有什么区别,首先必须了解它们的定义。

进程的英文是process,这个单词本身的意思是“处理、加工”,而这个概念的引入,是为了描述系统中程序执行时动态变化的过程,由于程序本身是一个静态的概念,在运行时它表现为一个整体,因此我们可以把一个正在运行中的程序作为一个基本单位,而它在运行过程中就表现为一个进程。

在多道程序批处理系统和分时系统中有多个并发执行的程序,为了描述系统中程序执行时动态变化的过程引入了进程。进程是资源分配和独立运行的基本单位。
——《软件设计师教程(第5版)》 4.2 操作系统知识.进程管理 p185

在多道程序系统中,进程在处理器上交替运行状态也不断地发生变化 ,因此进程一般有三种基本状态:运行、就绪和阻塞。
——《软件设计师教程(第5版)》 4.2.1 操作系统知识.进程管理.基本概念 p187-p188

线程的英文是Thread,这个单词本身的意思是“线索、线状物”,线程是程序调度和分配的基本单位,引入线程是为了提高进程的多并发能力。

传统的进程有两个基本属性:可资源的独立单位和可独立调度和分配的基本单位。
引入线程的原因是进程在创建、撤销和切换中,系统必须为之付出较大的时空开销,因此在系统中设置的进程数目不宜过多,进程切换的频率不宜太高,这就限制了并发程度的提高。进入线程后,将传统进程的两个基本属性分开,线程作为调度和分配的基本单位 ,进程作为独立分配资源的单位。用户可以通过创建线程来完成任务,以减少程序并发执行时付出的时空开销。
——《软件设计师教程(第5版)》 4.2.7 操作系统知识.进程管理.线程 p202

线程也具有就绪、运行和阻塞三种基本状态。由于线程具有许多传统进程所具有的特性,故称为“轻型进程(Light-Weight Process)”,传统进程称为“重型进程(Heavy-Weight Process)”
——《软件设计师教程(第5版)》 4.2.7 操作系统知识.进程管理.线程 p202

线程分为用户级线程(User-Level Threads)和内核支持线程(Kernel-Supported Theads)两类。用户级线程不依赖于内核......内核支持线程依赖于内核。
——《软件设计师教程(第5版)》 4.2.7 操作系统知识.进程管理.线程 p202

协程全名“协同程序”,英文是Coroutine,这本身是一个与语言无关的概念,但并不是所有的语言都支持协程,当然,也可以基于某语言自己开发一套协程的功能(例如Unity的协程)。在上面对线程和进程的介绍中,我们知道进程和线程有一个共同点,就是它们在运行时的三种基本状态:运行、就绪和阻塞,而这个过程是由系统控制的,使用者无法对它们进行调配,但是协程解决了这个问题。
例如Unity的协程中含有yield关键字,一个协程会在运行到yield关键字时暂停,等待下次系统再调用这个方法时再从上次暂停的位置继续运行。
协程只是一种执行方式,如果我们将协程的运行过程与线程、进程进行类比,以Unity的协程为例,当开始调用StartCoroutine方法时,这个协程就处于就绪状态;在运行到yield关键字前,它就处于运行状态;在运行到yield后到下次满足yield return的值为ture前,它将持续保持阻塞状态。因此,协程的运行状态是由代码控制的,而不由系统调度。

2.它们在使用和表现上的具体区别

解决了基本定义问题,那么我们来分析一下它们在使用和表现上的具体区别。
我们可以从很多个方面来看待它们,为了区别传统的进程概念,在没有特别说明的情况下,以下的进程是不包含线程的,即线程只作为调度和分配的基本单位 ,进程只作为独立分配资源的单位。
1.从实现上来说,线程和协程都是系统层级的,而协程是在编译层级的,虽然我们可以控制使用多线程,但它本质上是底层实现后暴露API给我们使用,而不是像协程一样,是在代码层实现的。
2.从体量(调用时对系统的时空消耗)来说,协程最大,线程居中,协程最小,协程又被称为“纤程”。
3.从控制上来说,进程的阻塞和结束只受系统控制,而线程可以一定程度被用户控制,协程完全受用户控制。在传统概念的进程中,一定是有一条主线程的,但是在这条主线程上可以开启、调用和关闭其他线程,并且也可以开启、调用、和关闭其他协程。
4.从功能上来说,进程只有资源管理功能,而线程和协程负责具体的执行。对同一程序运行时的进程而言,后两者调用的内存等资源都是自己对应的进程的资源。
5.从运行效率上来说,进程由于只有资源管理功能,可以认为不存在效率一说(对于传统的包含线程的进程概念,它的运行效率由主线程或多个运行的线程共同决定)。线程运行效率次于协程,因为线程的切换是需要开销的,并且对于多线程而言还需要考虑共享资源的冲突问题,因为协程本质上还是在主线程上运行,所以不需要考虑资源共享的冲突问题。

3.总结

以上剖析了一下进程、线程、协程三者之间的区别,并没有涉及到任何代码,只进行了原理探讨,并且从多个方面对三者进行了对比。
由于经验不足,其中难免存在很多疏漏,还希望各方大佬不吝指出。


?著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,128评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,316评论 3 388
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,737评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,283评论 1 287
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,384评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,458评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,467评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,251评论 0 269
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,688评论 1 306
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,980评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,155评论 1 342
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,818评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,492评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,142评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,382评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,020评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,044评论 2 352

推荐阅读更多精彩内容