范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文
国学影视

你学废了吗?WebGL与Node。js中的Buffer

  WebGL 和 Node.js 中都有 Buffer 的使用,简单对比记录一下两个完全不相干的领域中 Buffer 异同,加强记忆。
  Buffer 是用来存储 二进制 数据的「 缓冲区 」,其本身的定义和用途在任何技术领域都是一致的,跟 WebGL 和 Node.js 没有直接关系,两者唯一的共同点就是都使用 JavaScript。
  在 ES6 将TypedArray( 二进制类型数组 )正式加入 ECMA 标准之前,JavaScript 语言本身并没有 标准的 处理二进制数据的能力,Buffer 就是为了弥补这一缺陷。
  TypedArray 成为 ECMA 标准之前就已经在 WebGL 领域广泛使用了。
  Node.js 加入 Buffer 的作用主要是为了处理 stream,比如网络流、文件流等等。Buffer 占用 预申请 的一整片内存,stream 被消费的速度如果低于接收速度,就会被暂存在缓冲区内,然后被消费者从缓存区依序取出消费。
  Node.js 中的 Buffer 是 Uint8Array 的子类,Uint8Array 是ECMA 标准中 TypedArray 中的一种数据类型。 console.log(Buffer.__proto__)  // 打印 [Function: Uint8Array]
  其实 Node.js 中的 Buffer 与 ECMA 标准的 TypedArray 并没有直接关系,Node.js 很早期的版本(v0.10.0)版本就支持了 Buffer。Uint8Array,或者说 ECMA 标准中所有的 TypedArray 都是 JavaScript 引擎提供的一种 API,早期未被加入 ECMA 标准的时候就已经有不少引擎实现了这些 API,而最早使用二进制类型数组的场景就是 WebGL。
  话说回来,ECMA 标准做的不就是"集百家之长"(修辞手法-反讽)的事吗哈哈
  然后说到 WebGL 中的 Buffer。
  WebGL 有两种 Buffer 类型: ARRAY_BUFFER:顶点属性数据的 Buffer,用来传递任何跟顶点相关的数据,比如坐标、颜色等等。这些数据一般是浮点数,最常用的类型是 Float32Array; ELEMENT_ARRAY_BUFFER:元素索引数据的 Buffer,用来传递读取 ARRAY_BUFFER 元素的顺序。每个元素必须是整数,使用 Uint8Array,这一点跟 Node.js 中的 Buffer 一致。此 buffer 是可选项,如果不使用的话 ,ARRAY_BUFFER 的元素会被按照 index 依序读取。
  虽然 WebGL 中没有 stream 的概念(严格来说是从开发者的认知层面没有 stream,底层 OpenGL 处理 buffer 数据的流程中是有 stream 的),但 Buffer 的作用跟 Node.js 是一致的,都是 将数据暂存在一整片预申请的内存中,供后续进程逻辑消费 ,区别是消费者不同。
  在WebGL渲染管线中,但从CPU到GPU完整的数据传输链路中,有以下几种buffer: VBO,Vertex Buffer Object,顶点缓冲对象储存顶点属性数据,消费者是 shader,严格的说是 vertex shader; FBO,Fragment Buffer Object,帧缓冲对象可以简单理解为一个指针集合体,附着 RBO、颜色、纹理等用于渲染的所有信息; RBO,Rendering Buffer Object,渲染缓冲对象储存 depth(深度)、stencil(模板)值。
  FBO 与 RBO、纹理的关系如下图:
  另外一点需要了解的是 buffer 对象从 CPU 流转到 GPU 的过程,这个过程涉及到总线通讯,虽然这些跟 Node.js 没有一毛钱关系,但是其中的一些实现跟 Node.js 常见八股文面试题「跨进程通信」有一些相同的理念。
  WebGL中buffer最初被创建和寄存在CPU内存中,如何让GPU访问CPU内存呢?回答这个问题之前先介绍几个基本概念: CPU 的内存一般称为  main memory GPU 自己的储存称为  local memory
  在 WebGL/OpenGL 中,顶点数据被创建被寄存在 main memory 中,GPU 需要得到这部分数据进行渲染,但是 main memory 和 local memory 是绝对隔离的,不能互相访问。
  对于集成显卡来说,GPU 和 CPU 共享总线,GPU 没有自己独立的储存空间,一般是从 CPU 储存中分配出一块空间给 GPU 使用,我们把这部分空间姑且叫做显存(严格来说集成显卡没有显存的概念)。为了实现 GPU 和 CPU 数据的共享,业内引入了一种叫做  GART (Graphic Address Remapping Table)的技术,GART简单说就是一个映射 main memory 和 local memory 地址的表。集成显卡的显存一般很小,必然是小于内存的(一般默认上限是内存总量的1/4),OS 将整个 local memory 空间映射到 main memory,维护一个 GART。此时 buffer 数据的流转如下图所示:
  但是这套流程在独立显卡中是行不通的,因为独立显卡的显存非常大,如果使用 GART 将显存空间完全映射到 CPU 内存中会占用非常大的内存空间,32位系统的整个内存空间也就仅仅4GB,如果分出 2GB 给显存映射,那就别干啥了。
  这下明白为啥64位系统玩游戏更爽了吧~
  所以对于独立显卡需要另外一套 CPU 与 GPU 的数据共享机制。目前比较普遍的方式是在内存中单独划出一块 物理 空间用于 CPU 和 GPU 之间的数据交换中转,这部分内存空间叫做 pinned memory(锁定内存)。buffer 数据首先会被从 main memory 中拷贝到 pinned memory 中,然后通过  DMA (Direct Memory Access,直接内存访问)机制将数据传输到 GPU,整个过程如下:
  请注意, pinned memory 是一块 物理内存 而不是虚拟内存,这样能够保证DMA的传输性能。
  这下明白为啥打游戏一定要加大内存了吧~
  独立显卡的这套数据交换机制跟 Node.js 八股文「跨进程通信」的共享内存理念很接近,不过复杂度更高一些。
  上面这些内容大都是 OpenGL 和计算机底层的机制,对 WebGL 开发者来说是无感知的,具体到涉及 Buffer 的代码层面, WebGL 需要比 Node.js 更谨慎的处理 Buffer 的内存管理。
  Node.js 中 Buffer 在分配内存时采用了 slab 预先申请、事后分配机制,这是在底层C++的逻辑,开发者不可控。这套机制能够提高 Node.js 需要频繁申请 buffer 内存场景下的性能表现。而 WebGL 中并没有这套机制,需要开发者自行处理。一般的做法是 预申请一个容量很大的 buffer,然后使用 gl.bufferSubData(类似Node.js 的 Buffer.fill)局部更新数据 ,这样能避免频繁申请内存空间造成的性能损耗。

中国移动2022年深化改革的3个硬骨头前言2021年中国移动对终端业务体系铁通公司设计院等专业公司做了进一步深化改革,进一步厘清管理关系和主责定位深化改革依然是未来核心工作之一,但改革进入深水区,而且早就没有石头可摸,从传统图像算法到深度学习,文字识别技术经历了这些变化文字识别的发展大致可以分为两个阶段,分别是传统图像算法阶段和深度学习算法阶段。传统图像算法2012年之前,文字识别的主流算法都依赖于传统图像处理技术和统计机器学习方法实现,利用光学旧手机不要扔掉,教你改装成电视盒子,速度太快了,很实用不用的旧手机不要把它扔掉,我们可以把它改装成一个电视盒子,该怎么操作呢?大家好,我是科技熊,一个专注于黑科技数码产品开箱体验以及实用技巧分享的up主,像我们淘汰很多的旧手机,可能卡新iPhone确定3月8日发布3000多元价格定了下月8日,苹果即将发布最新的iPhoneSE3手机,该机采用A15芯片,而且支持5G,价格在3000元左右,这也是苹果旗下最便宜的5G手机,该机的发布将直接降低iPhone的使用门比特币价格实时行情比特币在2021年底创下历史新高后迅速下跌。根据欧易数据显示,比特币美元价格目前是在40580美元,反弹高点承压,而且下方继续试探支撑位,虽然多次试探未破,但是目前的阴柱直接吞没日美国管制华为5G后,国际巨头宣布重回中国市场,你会选择它吗?近十年来,国内手机市场不断洗牌的局面,不光是数码爱好者,普通人也是有目共睹的,毕竟谁不用手机呢?从10年初,苹果用iphone4开启智能手机时代后,诺基亚正式落幕。随着手机的用途不为什么以前听歌免费,现在听歌就要各种会员?以前音乐主要靠发行磁带CD赚钱,电子音乐主要为了传播。而现在基本没有磁带和CD赚钱了,再不保护版权,不收费,谁还会去创作音乐。当然也和最近这些年国家重视版权保护有关。知识付费的时代国行版三星note8顶配版7988元,你觉得怎么样?三星我这辈子都不会碰!买三星还不如买苹果!三星这几年被从国内市场挤出去了,有其产品本身质量的原因,也有大众消费观念的原因,大家一般认为韩国的东西基本上仿造美国日本欧洲!耐用性和本质怎样把视频压缩到最小?这个要看你小到什么程度了,影响视频文件大小主要是两个因素。一视频的尺寸,比如是1080P还是720P,还是别的尺寸,我们现在常用的就是1080P,也就是俗称全高清,视频尺寸大,文件滴滴莫名其妙被封号了该怎么办?滴滴司机师傅的账号莫名其妙的被滴滴出行查封,怎么办?首先,正常情况下,滴滴出行不会无故查封司机滴滴账号。查封前会在司机端有提示短信,不会无缘无故的。一般情况下查封滴滴账号有下列情节2022年值得购买的吸尘器大盘点,这款戴森你值得拥有作为一种近些年来愈加火爆的小家电,吸尘器在家庭环境中有着非常高的性价比。相较于传统的扫把簸箕来说,吸尘器对于工作效率的提升幅度是非常大的,并且能够清洁更深层次的陈年老灰,诸如地毯布
DevExpressv18。1新版亮点DevExtreme篇(一)行业领先的。NET界面控件2018年第二次重大更新DevExpressv18。2日前正式发布,本站将以连载的形式为大家介绍新版本新功能。本文将介绍了DevExtremeComple十家奶茶只有一家盈利?几十万家的奶茶店,不亏损都是奢望十家奶茶只有一家盈利?几十万家的奶茶店,不亏损都是奢望奶茶一年的消费人群大概是一亿,奶茶零售市场也接近万亿,这些原因让奶茶变成了一门火热的大生意。很多业内人士都说,保守估计,全国奶研究发现罗技M185等热门无线鼠标易受到MouseJack漏洞攻击所谓全球知名的PC外设大厂,罗技带来了诸多深受消费者欢迎的设备,但这有时也会带来一些麻烦,比如近日曝光的MouseJack漏洞。安全研究人员DavidSopas指出,鉴于罗技设备的iPhone电池被骂垃圾,为什么还不做大?不知道大家用苹果会不会有这种感受,手机玩一会就没电了,续航能力超低的,几个小时就要充一次电而当我换成安卓,用到华为时,真的是不禁感叹,怎么有这么耐电的手机,我都不敢相信在我这个中高上海交大发现量子通信的漏洞,量子通讯还安全吗?理论上已经证明,理想的量子通讯是绝对安全,但是现有的量子通讯技术,由于设备的非理想化,还是给窃听者留下了漏洞。这次上海交通大学的研究人员,就发现了其中一个漏洞,他们借助一种叫做注入五大分布式ID生成器优缺点及对比专注于Java领域优质技术,欢迎关注作者业余草首选,不管是不是分布式系统,都有ID唯一的使用场景。而在分布式场景下,对ID的唯一性要求更严格!常见的,我们上淘宝买东西的订单ID,就工信部发23批免购置税目录83款车入选XCAR行业资讯原创日前,工信部发布免征车辆购置税的新能源汽车车型目录(第二十三批),其中包括201款新能源汽车,这里包含有68款纯电动乘用车和15款插电式混合动力乘用车。本批次中特斯拉或将推出全新电池技术目前推广电动车最大障碍是当前的电池技术标准,特别是每次充电所需要的时间以及充电后所能行驶的路程。汽车的存在是为了便捷生活,如果到达某地途中需要花费很长的时间来充电,那么汽车的外观和不是科幻!你说什么手机就推荐什么,美团饿了么回应只是巧合你是否有过刚好说了想吃什么,打开外卖APP,想吃的东西就刚好在推荐页面的经历?或者说了想买什么,打开淘宝主页上就是广告?有记者花费了3个月的时间对不同系统的电子设备进行测试,发现外苹果悄无声息放大招,新的苹果产品就这样来了今天下午苹果官网关闭维护,恐是有新品发布,果不其然,现在官网已经恢复,并上架了两款新品新款iPadAir及iPadmini。根据官网页面的描述,新款iPadAir和iPadmini原装电池停产,电池换新遭遇无法可依电池坏了怎么办?修。修不好怎么办?换。这种听起来合理的做法,实际操作中却可能面临违规风险如果原装电池已经停产或厂家倒闭,更换的新电池型号,甚至品牌都和车辆原公告不符,不但违背了新能