
1、进程
进程是具有一定独立功能的程序关于某个数据集合上的一次运行活动,进程是系统进行资源分配和调度的一个独立单位。每个进程都有自己的独立内存空间,不同进程通过进程间通信来通信。由于进程比较重量,占据独立的内存,所以上下文进程间的切换开销(栈、寄存器、虚拟内存、文件句柄等)比较大,但相对比较稳定安全。
2、线程
线程是进程的一个实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位.线程自己基本上不拥有系统资源,只拥有一点在运行中必不可少的资源(如程序计数器,一组寄存器和栈),但是它可与同属一个进程的其他的线程共享进程所拥有的全部资源。线程间通信主要通过共享内存,上下文切换很快,资源开销较少,但相比进程不够稳定容易丢失数据。
3、协程
协程是一种用户态的轻量级线程,协程的调度完全由用户控制。协程拥有自己的寄存器上下文和栈。协程调度切换时,将寄存器上下文和栈保存到其他地方,在切回来的时候,恢复先前保存的寄存器上下文和栈,直接 *** 作栈则基本没有内核切换的开销,可以不加锁的访问全局变量,所以上下文的切换非常快。
二、区别:
1、进程多与线程比较
线程是指进程内的一个执行单元,也是进程内的可调度实体。线程与进程的区别:
1) 地址空间:线程是进程内的一个执行单元,进程内至少有一个线程,它们共享进程的地址空间,而进程有自己独立的地址空间
2) 资源拥有:进程是资源分配和拥有的单位,同一个进程内的线程共享进程的资源
3) 线程是处理器调度的基本单位,但进程不是
4) 二者均可并发执行
5) 每个独立的线程有一个程序运行的入口、顺序执行序列和程序的出口,但是线程不能够独立执行,必须依存在应用程序中,由应用程序提供多个线程执行控制
2、协程多与线程进行比较
1) 一个线程可以多个协程,一个进程也可以单独拥有多个协程,这样python中则能使用多核CPU。
2) 线程进程都是同步机制,而协程则是异步
3) 协程能保留上一次调用时的状态,每次过程重入时,就相当于进入上一次调用的状态
三、进程和线程、协程在python中的使用
1、多进程一般使用multiprocessing库,来利用多核CPU,主要是用在CPU密集型的程序上,当然生产者消费者这种也可以使用。多进程的优势就是一个子进程崩溃并不会影响其他子进程和主进程的运行,但缺点就是不能一次性启动太多进程,会严重影响系统的资源调度,特别是CPU使用率和负载。使用多进程可以查看文章《python 多进程使用总结》。注:python2的进程池在类中的使用会有问题,需要把类函数定义成全局函数。具体可参考 http://bbs.chinaunix.net/thread-4111379-1-1.html
2、多线程一般是使用threading库,完成一些IO密集型并发 *** 作。多线程的优势是切换快,资源消耗低,但一个线程挂掉则会影响到所有线程,所以不够稳定。现实中使用线程池的场景会比较多,具体可参考《python线程池实现》。
3、协程一般是使用gevent库,当然这个库用起来比较麻烦,所以使用的并不是很多。相反,协程在tornado的运用就多得多了,使用协程让tornado做到单线程异步,据说还能解决C10K的问题。所以协程使用的地方最多的是在web应用上。
总结一下就是IO密集型一般使用多线程或者多进程,CPU密集型一般使用多进程,强调非阻塞异步并发的一般都是使用协程,当然有时候也是需要多进程线程池结合的,或者是其他组合方式。
技术知识掌握情况。1.请简述值类型与引用类型的区别
2.C#中所有引用类型的基类是什么
3.请简述ArrayList和List<Int>的主要区别
4.请简述GC(垃圾回收)产生的原因,并描述如何避免?
5.请描述Interface与抽象类之间的不同
6.下列代码在运行中会产生几个临时对象?
7.下列代码在运行中会发生什么问题?如何避免?
8.请简述关键字Sealed用在类声明和函数声明时的作用
9.请简述private,public,protected,internal的区别
10.反射的实现原理?
11. .Net与Mono的关系?
12.简述unity3d支持的作为脚本的语言的名称
13.Unity3D是否支持写成多线程程序?如果支持的话需要注意什么?
14.Unity3D的协程和C#线程之间的区别是什么?
15.U3D中用于记录节点空间几何信息的组件名称,及其父类名称
16.简述四元数的作用,四元数对欧拉角的优点?
17.向量的点乘、叉乘以及归一化的意义?
18.矩阵相乘的意义及注意点
19.为何大家都在移动设备上寻求U3D原生GUI的替代方案
20.请简述如何在不同分辨率下保持UI的一致性
21.为什么dynamic font在unicode环境下优于static font
22.Render的作用?描述MeshRender和SkinnedMeshRender的关系与不同
23.简述SkinnedMesh的实现原理
24.在场景中放置多个Camera并同时处于活动状态会发生什么?
25.Prefab的作用?如何在移动环境的设备下恰当地使用它?
26.如何销毁一个UnityEngine.Object及其子类
27.为什么Unity3D中会发生在组件上出现数据丢失的情况?
28.如何安全的在不同工程间安全地迁移asset数据?三种方法
29.MeshCollider和其他Collider的一个主要不同点?
30.当一个细小的高速物体撞向另一个较大的物体时,会出现什么情况?如何避免?
31.OnEnable、Awake、Start运行时的发生顺序?哪些可能在同一个对象周期中反复的发生?
32.请简述OnBecameVisible及OnBecameInvisible的发生时机,以及这一对回调函数的意义?
33.Unity3D如何获知场景中需要加载的数据?
34.MeshRender中material和sharedmaterial的区别?
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)