前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >学习 PixiJS — 视觉效果

学习 PixiJS — 视觉效果

作者头像
FEWY
发布于 2019-05-29 12:32:57
发布于 2019-05-29 12:32:57
3.5K00
代码可运行
举报
文章被收录于专栏:FEWYFEWY
运行总次数:0
代码可运行

平铺精灵

平铺精灵是一种特殊的精灵,可以在一定的范围内重复一个纹理。你可以使用它们创建无限滚动的背景效果。要创建平铺精灵,需要使用带有三个参数的 TilingSprite 类(PIXI.extras.TilingSprite)

用法:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
let tilingSprite = new PIXI.extras.TilingSprite(texture, width, height);

参数:

名称

默认值

描述

texture

平铺精灵的纹理

width

100

平铺精灵的宽度

height

100

平铺精灵的高度

除此之外,平铺精灵具有与普通精灵所有相同的属性,并且与普通精灵的工作方式相同。他们还有 fromImage 和 fromFrame 方法,就像普通精灵一样。以下是如何使用名称是 brick.jpg 的100 x 100像素的图像创建200 x 200像素的平铺精灵。并且从画布左上角偏移30像素。

以下是关键代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
let tilingSprite = new PIXI.extras.TilingSprite(
 PIXI.loader.resources[imgURL].texture, 200, 200
);
tilingSprite.x = 30;
tilingSprite.y = 30;

下图显示了 brick.jpg 图像以及上面代码的效果。

你可以使用 tilePosition.x 和 tilePosition.y 属性来移动平铺精灵使用的纹理。以下是如何将平铺精灵使用的纹理移动30像素。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
tilingSprite.tilePosition.x = 30;
tilingSprite.tilePosition.y = 30;

这里不是在移动平铺精灵,而是移动平铺精灵使用的纹理。下图是两种情况的对比。

你还可以使用 tileScale.x 和 tileScale.y 属性更改平铺精灵使用的纹理的比例。以下是如何将平铺精灵使用的纹理的大小增加到1.5倍的关键代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
tilingSprite.tileScale.x = 1.5;
tilingSprite.tileScale.y = 1.5;

原图 与 上面代码实现的效果的对比:

tileScale 和 tilePosition 都有一个 set 方法,可以一行代码设置 x 属性和 y 属性。

参数:

名称

默认值

描述

x

0

新的 x 属性值

y

0

新的 y 属性值

用法:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
tilingSprite.tilePosition.set(30, 30);
tilingSprite.tileScale.set(1.5, 1.5);

平铺精灵是创建重复图像模式的便捷方式。因为你可以移动纹理的位置,所以你可以使用平铺精灵创建无缝的滚动背景。这对于许多类型的游戏都非常有用。让我们来看看如何做到这一点。

首先,从无缝平铺图像开始。无缝图像是图案在各方面匹配的图像。如果并排放置图像的副本,它们看起来就像是一个连续的大图像,上面示例中用到的 brick.jpg 就是这种图像。

接下来,使用此图像创建一个平铺精灵。然后在游戏循环中更新精灵的 tilePosition.x 属性。

关键代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
function play() {
 tilingSprite.tilePosition.x -= 1;
}

效果图:

你还可以使用此功能创建一个称为视差滚动的伪3D效果。就是在同一位置层叠多个这样的平铺精灵,并使看上去更远的图像移动得比更近的图像慢。就像下面这个示例一样!

两张用于做平铺精灵的图像:

着色

精灵有一个 tint 属性,给这个属性赋值一个十六进制颜色值可以改变精灵的色调。

我们来试试吧!

关键代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
sprite.tint = 0xFFFF660;

原图 与 上面代码实现的效果的对比:

每个精灵的 tint 属性默认值是白色(0xFFFFFF),也就是没有色调。如果你想改变一个精灵的色调而不完全改变它的纹理,就使用着色。

蒙版

Pixi 允许你使用 Graphics (图形)对象来屏蔽任何精灵或具有嵌套子精灵的容器。蒙版是隐藏在形状区域之外的精灵的任何部分的形状。要使用蒙版,先创建精灵和 Graphics 对象。然后将精灵的 mask 属性设置为创建的 Graphics 对象。

示例:

首先,用皮卡丘的图像创建一个精灵。然后创建一个蓝色正方形并定位在精灵的上方(形状的颜色并不重要)。最后,精灵的 mask 属性设置为创建的正方形对象。这样会只显示正方形区域内精灵的图像。精灵在正方形之外的任何部分都是不可见的。

原图 与 使用蒙版后的对比:

关键代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
//创建精灵
let Pikachu = new PIXI.Sprite(PIXI.loader.resources[imgURL].texture);

//创建一个正方形对象
let rectangle = new PIXI.Graphics();
rectangle.beginFill(0x66CCFF);
rectangle.drawRect(0, 0, 200, 200);
rectangle.endFill();
rectangle.x = 100;
rectangle.y = 100;

//给精灵设置蒙版
Pikachu.mask = rectangle;

你还可以为蒙版设置动画,去做出一些有趣的效果。而且如果是用 WebGL 渲染的话,还可以用精灵作为蒙版。下面这个示例是用三张图片做成精灵,然后把一个精灵作为蒙版,并且给蒙版设置动画的示例。

效果图:

混合模式

blendMode 属性确定精灵如何与其下层的图像混合。

如下所示,可以将它们应用于精灵:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
sprite.blendMode = PIXI.BLEND_MODES.MULTIPLY;

以下是可以使用的17种混合模式的完整列表:

没有混合

  • NORMAL(正常)

对比比较(饱和度模式)

  • SOFT_LIGHT(柔光)
  • HARD_LIGHT(强光)
  • OVERLAY(叠加)

对比比较(差集模式)

  • DIFFERENCE(差值)
  • EXCLUSION(排除)

减淡效果(变亮模式)

  • LIGHTEN(变亮)
  • COLOR_DODGE(颜色减淡)
  • SCREEN(滤色)
  • ADD(线性减淡,添加)

加深效果(变暗模式)

  • DARKEN(变暗)
  • COLOR_BURN(颜色加深)
  • MULTIPLY(正片叠底)

色彩效果(颜色模式)

  • HUE(色相)
  • SATURATION(饱和度)
  • COLOR(颜色)
  • LUMINOSITY(明度)

这些混合模式和图像编辑器,比如 Photoshop 中使用的混合模式是一样的,如果你想尝试每种混合模式,你可以在 Photoshop 中打开一些图像,将这些混合模式应用于这些图像上,观察效果。

注意: WebGL 渲染器仅支持 NORMAL,ADD,MULTIPLY 和 SCREEN 混合模式。任何其他模式都会像 NORMAL 一样。

滤镜

Pixi 拥有多种滤镜,可以将一些特殊效果应用于精灵。所有滤镜都在 PIXI.filters 对象中。滤镜是 Pixi 最好的功能之一,因为它们可以让你轻松创建一些特殊效果,否则只有通过复杂的低级 WebGL 编程才能实现这些效果。

这是一个如何创建 BlurFilter (模糊滤镜)的示例(其他滤镜遵循相同的格式):

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
//创建一个模糊滤镜
let blurFilter = new PIXI.filters.BlurFilter();

//设置模糊滤镜的属性
blurFilter.blur = 20;

//将模糊滤镜添加到精灵的滤镜数组中
sprite.filters = [blurFilter];

Pixi 的所有显示对象(Sprite 和 Container 对象)都有一个滤镜数组。要向精灵添加滤镜,先创建滤镜,然后将其添加到精灵的滤镜数组中。你可以根据需要添加任意数量的滤镜。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
sprite.filters = [blurFilter, sepiaFilter, displacementFilter];

使用它就像使用其他普通数组一样。要清除所有精灵的滤镜,只需清除数组即可。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
sprite.filters = [];

除了这些属性,所有滤镜还包括额外的 padding 和 uniforms 属性。padding 增加了滤镜区域周围的空间。uniforms 是一个可用于向 WebGL 渲染器发送额外值的对象。在日常使用中,你永远不必担心设置 uniforms 属性。

PixiJS 在4.0.0版本的时候,将非核心滤镜转移到新的包 — pixi-filters,现在 PixiJS 内置的滤镜有下面这几种。

  • AlphaFilter 用来修改对象透明度的滤镜。 在其他一些文档中,你可能看到的是 VoidFilter 这个滤镜,这是因为在 PixiJS 的4.6.0版本的时候,才添加 AlphaFilter,而弃用 VoidFilter。
  • BlurFilter BlurFilter 将高斯模糊应用于对象。可以分别为x轴和y轴设置模糊强度。
  • BlurXFilter BlurXFilter 将水平高斯模糊应用于对象。
  • BlurYFilter BlurYFilter 将垂直高斯模糊应用于对象。
  • ColorMatrixFilter ColorMatrixFilter 类允许你对 显示对象(displayObject) 上每个像素的 RGBA 颜色和 alpha 值应用5x4矩阵变换,以生成一组具有新的 RGBA 颜色和 alpha 值的结果。它非常强大!使用它可是实现黑白、调整亮度、调整对比度、去色、灰度、调整色调,等许多效果。
  • DisplacementFilter DisplacementFilter 类使用指定纹理(称为置换贴图)中的像素值来执行对象的位移。你可以使用这个滤镜来实现扭曲的效果。 在这篇文章中已经讲过什么是 DisplacementFilter(置换滤镜)了,并且文章中也有一个不错的示例
  • FXAAFilter 快速近似抗锯齿滤镜。
  • NoiseFilter 杂色效果滤镜。

注意:Pixi 的滤镜仅适用于 WebGL 渲染,因为 Canvas 绘图 API 太慢而无法实时更新它们。

这里有一个示例,包含了 Pixi 中绝大部分的滤镜。

http://pixijs.io/pixi-filters/tools/demo/

视频纹理http://pixijs.download/release/docs/PIXI.Texture.html#.fromVideo

你可以将视频用作精灵的纹理,就像使用图像一样容易。使用 Texture 类的 fromVideo 方法就可以创建视频纹理。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
videoTexture = PIXI.Texture.fromVideo(videoUrl);
videoSprite = new PIXI.Sprite(videoTexture);
stage.addChild(videoSprite);

或者,也可以使用 fromVideoUrl 方法从 URL 地址创建视频纹理。

视频纹理只是一个普通的 HTML5 <video> 元素,你可以通过纹理的 baseTexture.source 属性访问它,如下所示:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
let videoSource = videoTexture.baseTexture.source;

然后,你可以使用任何 HTML5 <video> 元素的属性和方法控制视频,例如 play 和 pause 。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
videoSource.play();
videoSource.pause();

查看 HTML <video> 元素的完整规范https://developer.mozilla.org/zh-CN/docs/Web/HTML/Element/video,可以知道所有可以使用的属性和方法。

适配多种分辨率

如果你对物理像素、设备独立像素、设备像素比,等一些名词还不熟悉,可以先看看这篇文章 https://www.cnblogs.com/webspace/p/8625464.html。

Pixi 会自动调整像素密度,以匹配运行内容的设备的分辨率。你所要做的就是为高分辨率和低分辨率提供不同的图像,Pixi 将帮助你根据当前的设备像素比选择正确的图像。

注意:当你创建高分辨率图像时,可以将“@2x”添加到图像文件名称后面,以说明图像是支持高分辨率的屏幕,例如,Retina 屏幕。同时这也会设置精灵的 baseTexture.resolution 属性(sprite.texture.baseTexture.resolution)。

第一步是找出当前的设备像素比。你可以使用 window.devicePixelRatio 方法执行此操作。将此值分配给变量。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
let displayResolution = window.devicePixelRatio;

displayResolution 是一个描述设备像素比的数字。它由运行应用程序的设备自动提供。1是标准分辨率; 2是高密度分辨率; 你将越来越多地发现一些报告3的超高密度显示器。

下一步是将此值分配给渲染选项的 resolution 属性。在创建 Pixi 应用时执行此操作,如下所示:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
//创建一个 Pixi应用 需要的一些参数
let option = {
   width: 640,
   height: 360,
   transparent: true,
   resolution: displayResolution
}
//创建一个 Pixi应用
let app = new PIXI.Application(option);

然后根据设备像素比选择正确的图像加载到纹理中。如下所示:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
let texture;
if (displayResolution === 2) {
    //加载高分辨率图像
    texture = PIXI.Texture.fromImage("highResImage@2x.png");
} else {
    //加载普通分辨率图像
    texture = PIXI.Texture.fromImage("normalResImage.png");
}
let anySprite = new PIXI.Sprite(texture);

如果你需要知道加载纹理的设备像素比是多少,可以使用 texture 的 baseTexture.resolution 属性(texture.baseTexture.resolution)找出。

查看示例https://www.kkkk1000.com/images/learnPixiJS-VisualEffects/MultipleResolutions.html

绳(Rope)http://pixijs.download/release/docs/PIXI.mesh.Rope.html

另一个有趣的效果是 Rope。它允许精灵像波浪一样振荡或像蛇一样滑行,如下图所示。

首先,从想要变形的事物的图像开始。滑行蛇实际上是一个简单的直线图像,如下图所示。

然后决定你想要独立移动蛇的段数。蛇图像的宽度为600像素,因此大约20个片段会产生很好的效果。将图像宽度除以段数,就是每个绳段的长度。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
let numberOfSegments = 20;
let imageWidth = 600;
let ropeSegment = imageWidth / numberOfSegments;

接下来,创建一个包含20个 Point http://pixijs.download/release/docs/PIXI.Point.html 对象的数组。每个 Point 的 x 位置(第一个参数)将与下一个 Point 分开一个 ropeSegment 的距离。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
let points = [];
for (let i = 0; i < numberOfSegments; i++) {
 points.push(new PIXI.Point(i * ropeLength, 0));
}

现在使用 PIXI.mesh.Rope 方法 new 一个 Rope 对象。这个方法需要两个参数:

  • 一个是 Rope 对象使用的纹理
  • 一个是包含 Point 对象的数组
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
let snake = new PIXI.mesh.Rope(PIXI.Texture.fromImage('snake.png'), points);

将蛇添加到一个容器中,这样可以更容易定位。然后将容器添加到舞台并定位它。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
let snakeContainer = new PIXI.Container();
snakeContainer.addChild(snake);
stage.addChild(snakeContainer);
snakeContainer.position.set(10, 150);

现在为游戏循环中的 Point 对象设置动画。通过 for 循环将数组中的每个 Point 按照椭圆形的轨迹移动,形成波浪效果。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
count += 0.1;
for (let i = 0; i < points.length; i++) {
    points[i].y = Math.sin((i * 0.5) + count) * 30;
    points[i].x = i * ropeLength + Math.cos((i * 0.3) + count) * numberOfSegments;
}

查看示例https://www.kkkk1000.com/images/learnPixiJS-VisualEffects/rope.html

这里还有一篇文章 https://z4none.me/post/2016/draw-swimming-koi-fish-in-pixijs,讲的是用 Rope 来实现游动的锦鲤的效果,看上去也很好玩。

总结

本文主要聊了聊平铺精灵、着色、蒙版、混合模式、滤镜、视频纹理、适配多种分辨率、绳(Rope),相关的东西。

如果你觉得文字解释的不清楚,在每小节中,都有一个或者多个相应的示例,你可以点开看看,而且示例中的注释也比较清楚。 还有就是因为 PixiJS 的 API 时常有变化,所以要注意 PixiJS 的版本,文中大部分示例用的版本是4.8.2 https://github.com/pixijs/pixi.js/releases/tag/v4.8.2,如果你在尝试使用的时候,发现和示例的效果不一样,可以先检查一下版本。

如果文中有错误的地方,还请小伙伴们指出,万分感谢。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019年02月03日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
【操作系统】操作系统运行环境——处理器的运行模式
在上一篇内容中我们介绍了操作系统的发展史,操作系统从诞生到发展主要经历了手工操作阶段、批处理阶段、分时操作系统阶段、实时操作系统阶段、网络操作系统和分布式计算机系统阶段以及个人计算机操作系统这6个阶段。我们可以将其归纳为以下4个阶段:
蒙奇D索隆
2024/09/07
3510
【操作系统】操作系统运行环境——处理器的运行模式
​五分钟扫盲:进程与线程基础必知
进程(Process)和线程(Thread)是操作系统的基本概念,但是它们比较抽象,不容易掌握。以下这个解释出自阮一峰老师的博客(http://www.ruanyifeng.com/blog/2013/04/processes_and_threads.html),虽然「不是非常严谨,但是足够形象」,看完之后能对进程和线程有个非常直观的印象,这样也方便理解后文。
飞天小牛肉
2021/02/26
3930
​五分钟扫盲:进程与线程基础必知
操作系统习题知识点
操作系统有硬件和软件组成,硬件是CPUC软件建立与活动的基础,而软件是对硬件功能的扩充。硬件包括CPU、内存、I/O设备和总线等,软件通常分为应用软件、支撑软件和系统软件。
kif
2023/02/27
1.9K0
操作系统习题知识点
操作系统学习笔记-进程描述和控制
进程控制块包含了充分的信息,这样就可以中断一个进程的执行,并且在后来恢复执行进程时就好像进程未被中断过。进程控制块是操作系统能够支持多进程和提供多处理的关键工具。当进程被中断时,操作系统会把程序计数器和处理器寄存器(上下文数据)保存到进程控制块中的相应位置,进程状态也被改变为其他的值(例如阻塞状态或就绪状态)。
花猪
2022/02/16
8230
操作系统学习笔记-进程描述和控制
[每天五分钟,备战架构师-2]操作系统基本原理
操作系统是管理和控制计算机硬件和软件资源的计算机程序,是直接运行在“裸机”上的最基本的系统软件。注意,这里说的裸机可以是物理机,也可以是虚拟机。随着技术的发展,现在还出现了Docker容器技术,一个Docker容器实际上不一定需要具备完整的系统功能也能够运行程序,其底层是通过宿主机的内核来与硬件进行交互的。
大江小浪
2018/09/19
5300
[每天五分钟,备战架构师-2]操作系统基本原理
开发成长之路(21)-- 不可不知的操作系统知识(1)
最下面是硬件系统;最上面是使用计算机的人,即各种各样的用户;人与硬件系统之间是软件系统。系统软件是最靠近硬件的一层,其次是支撑软件和应用软件。
看、未来
2021/09/18
4730
操作系统 - 进程
系统为每一个运行的程序配置一个数据结构,称为进程控制块(PCB),用来描述进程的各种信息(如程序代码存放位置)
ppxai
2020/09/23
9230
操作系统 - 进程
《Linux操作系统编程》第二章 进程运行与调度: 了解进程的定义与特征、进程的状态与切换、进程管理的数据结构、进程的创建与终止、阻塞与唤醒、挂起与激活以及处理机调度的相关概念
要求学生了解进程的定义与特征、进程的状态与切换、进程管理的数据结构、进程的创建与终止、阻塞与唤醒、挂起与激活以及处理机调度的相关概念。
猫头虎
2024/04/08
4250
《Linux操作系统编程》第二章 进程运行与调度: 了解进程的定义与特征、进程的状态与切换、进程管理的数据结构、进程的创建与终止、阻塞与唤醒、挂起与激活以及处理机调度的相关概念
操作系统知识清单
1、存储器在CPU外,一般指硬盘,U盘等可以在切断电源后保存资料的设备,容量一般比较大,缺点是读写速度都很慢,普通的机械硬盘读写速度一般是50MB/S左右。
zhangjiqun
2024/12/16
680
操作系统知识梳理共9次缺页
第一章:概述 什么是操作系统? 是一段一直运行在计算机上的程序 是资源的分配者 向上管理软件向下管理硬件 为用户提供良好接口 中断的概念? 中断指当出现需要时,CPU暂时停止当前程序的执行转而执行处理新情况的程序和执行过程。 中断向量的概念? 各种设备的中断处理子程序的地址数组 什么是系统调用? 由操作系统实现提供的所有系统调用所构成的集合即(Application Programming Interface,API)。是应用程序同系统之间的接口。 内存是什么? 内存是处理器可以直接访问的唯一的大容量存储区
张俊怡
2018/04/24
8980
操作系统笔记-进/线程模型
进程表(process table),也称进程控制块(PCB),是由操作系统维护的,每个进程占用其中一个表项。该表项包含了操作系统对进程进行描述和控制的全部信息,从而保证该进程换出后再次启动时,就像从未中断过一样。
Cloud-Cloudys
2020/07/25
5570
关于操作系统的一些事,这些你应该要知道~
操作系统的运行机制 计算机系统中,通常CPU执行两种不同性质的程序:一种是操作系统内核程序;另一种是用户自编程序或系统外层的应用程序。对操作系统而言,这两种程序的作用不同,前者是后者的管理者,因此“管理程序”要执行一些特权指令,而“被管理程序”出于安全考虑不能执行这些指令。所谓特权指令,是指计算机中不允许用户直接使用的指令,如I/O指令、 置中断指令,存取用于内存保护的寄存器、送程序状态字到程序状态字寄存器等指令。操作系统在具体实现上划分了用户态(目态)和核心态(管态),以严格区分两类程序。 现代计算机几
谭庆波
2018/08/10
4350
关于操作系统的一些事,这些你应该要知道~
操作系统知识点整理
书《计算机操作系统》第四版(汤小丹编著) 课程操作系统 操作系统启动流程略了 md和pdf下载:Chasssser 完整版包括收集的题目 以下仅为知识点
Enterprise_
2019/02/20
1.2K0
你该懂得操作系统知识—内核态和用户态
现代操作系统一般将 OS 划分非若干层次,再将 OS 的不同功能分别设置在不同的层次中。通常将一些与硬件紧密相关的模块(如中断处理程序等)、各种常用设备的驱动程序以及运行频率较高的模块(如时钟管理、进程调度和许多模块所公用的一些基本操作),都安排在紧靠硬件的软件层次中,将它们常驻内存,即通常所称为的OS 内核。这种安排方式的目的在于两个方面:
早安嵩骏
2020/08/11
1.8K0
操作系统笔记-进程
由于某些硬件或操作是需要操作系统进行调用的,保证安全所以防止用户直接进行操作,而当用户要操作的只有操作系统能够调用的操作的时候,此时需要通知操作系统,而此时则是产生中断,中断实际上就是设置中断寄存器的标识位,cpu会在每个指令后检查其中断寄存器是否发生中断,如果发生则需要执行对应的中断程序。
大猫的Java笔记
2023/03/08
5970
操作系统笔记-进程
操作系统笔记【进程管理及控制
顺序执行:单道批处理的执行方式,也用于简单的单片机系统,具有独立功能的程序独占cpu直到得到最终结果的过程
BWH_Steven
2020/05/09
9570
操作系统之进程管理(上),研究再多高并发,都不如啃一下操作系统进程!!!
由图可知程序会先由编译器编译成机器指令,运行之前先把程序放入内存,在内存中创建一个进程实体。一个进程实体(进程映像)由PCB、程序段、数据段组成。然后CPU从内存中取出指令,来运行程序。
阿甘的码路
2022/09/22
4890
操作系统之进程管理(上),研究再多高并发,都不如啃一下操作系统进程!!!
大学课程 | 计算机操作系统
(3) 模块接口法的优缺点: 优点: ①提高OS设计的正确性,可理解性,可维护性 ②增强OS的可适应性 ③加速OS的开发过程 缺点: ①接口很难满足实际需求 ②无序模块法,无法寻找一个可靠的决定顺序
Justlovesmile
2021/12/14
9340
大学课程 | 计算机操作系统
《计算机操作系统-第三章》之中断与系统调用
早期的计算机虽然对程序的处理是成批进行的,但是内存中始终只能处理一个程序,而CPU的处理速度是非常的快的,当CPU运行期间向IO设备发送输入或者输出请求时,高度运转的CPU需要等待龟速的IO完成状态。为了提高资源利用率,人们就发明了操作系统,引入了中断机制,实现了多道程序技术。
用户10517932
2023/10/07
4700
《计算机操作系统-第三章》之中断与系统调用
『操作系统』 进程的描述与控制 Part 1 前驱图与程序执行
一个程序由若干个程序段组成,而这些程序段的执行必须是顺序的,这种程序执行的方式就称为程序的顺序执行。
风骨散人Chiam
2021/09/06
1.3K0
推荐阅读
相关推荐
【操作系统】操作系统运行环境——处理器的运行模式
更多 >
LV.1
百信银行资深运维工程师
作者相关精选
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验