操作系统学习笔记(三)进程的调度,同步/互斥与死锁
之前一篇博客讲过了进程存在的意义是什么,我们为什么要搞出进程这个概念。
但是随之而来的就是几个连续的问题,也是多道并发会遇到的几个问题:
- 多个进程并发的时候,如何进行调度,调度的原则是什么?
- 如果多个进程之间有相互依赖关系怎么办,比如同步和互斥关系?
- 如果因为依赖关系,产生了循环依赖,可能导致死锁,又该怎么办?
这篇博客我们就第一个问题进行解释,那就是处理机如何进行调度的。
之前一篇博客讲过了进程存在的意义是什么,我们为什么要搞出进程这个概念。
但是随之而来的就是几个连续的问题,也是多道并发会遇到的几个问题:
这篇博客我们就第一个问题进行解释,那就是处理机如何进行调度的。
最近在开发一个Unity人物形象的SDK,目标是该SDK可以动态下载最新的人物和服装的模型而不用让提前内置在SDK中。
一开始我打算采用的方案是传统的比较成熟的Addressables去打包bundle的方式,但是bundle的划分是个问题,而且这种方式需要每次把模型导入unity然后再出包,再更新catalog,整个流程比较繁琐。
所以我就在想,能不能直接从远程加载FBX和贴图,然后直接使用FBX进行加载就好,这样整个发版流程会简单很多。
经过一番查找,找到了TriLib这个仓库,他可以很方便的从远程加载模型。但是也有一些问题,为了定位这些问题,特意阅读了下源码,这里总结下,其实感觉整个仓库的逻辑是比较简单清晰的。
前面的几篇博客讲了游戏渲染的基本原理和如何在Unity里写一个Shader,这篇博客先插入两个概念:
在内置渲染管线中,表面着色器是编写与光照交互的着色器的一种简化方式。
编写与光照交互的着色器非常复杂。有不同的光源类型,不同的阴影选项,不同的渲染路径(前向和延迟渲染);着色器应该以某种方式应对所有这些复杂性。
表面着色器是一种代码生成方法,与使用低级顶点/像素着色器程序相比,可以更轻松地编写光照着色器。
在Unity中,我们使用HLSL的语法来写Shader Program,不过一开始Unity采用的是CG语法,因此会使用 Unity 某些关键字的名称 (CGPROGRAM) 和文件扩展名 (.cginc)。虽然Unity 不再使用 Cg,但这些名称仍在使用。
上一篇博客了解了一些Unity Shader的概念,继续看一下如何编写一个Shader。
前面介绍了渲染流水线的基本内容,接下来就其中的我们可以编程的部分进行介绍,开始之前我们需要先介绍一些基础概念,对其中的一些属性进行简单说明。
在看了计算机组成原理中的存储系统一章后,结合操作系统中的内存管理和文件管理,对整个计算机的存储管理有了新的理解,这里就一起杂糅着总结一下。
首先抛出几个我的总体看完以后的新的理解:
最近在研究Unity性能优化相关的内容,接触了几个Unity官方自己的工具,这里总结一下它们的使用方式以及如何结合着使用。
我主要用到了以下几个工具:
首先总体上讲一下这三者之间的关系:Profiler是Unity Editor中自带的性能分析工具,不需要额外下载,能对CPU,GPU,内存,Render,物理,网络等等的性能数据进行搜集。而UPR则是利用了Profiler的数据进行了进一步的专业分析和统计,Memory Profiler是针对Profiler的内存数据进行了专门的分析,在运行期间可以进行内存的快照收集。