分页数据库其实就是两个生产者与消费者

2023-11-07

再次看osg《最长的一帧》,因为分页数据库适合于PagedLod和ProxyNode,一般调试还得准备数据,比较麻烦。
突然想起,和我以前封装的引擎类似。分页数据库就是几个生产者与消费者。
回过头来看这个图。

在这里插入图片描述
看似复杂,实际上并不复杂。
如果简化,只需要一个数据请求列表和等待合并列表就够了。请求什么数据,就合并什么数据即可。当然,合并前清空数据。
也就是说,在请求数据时,用生产者和消费者的方式;同样,在渲染合并列表时,也用生产者和消费者的模式。

如果,再考虑效率,就要加上等待编译列表,把stateset和drawable加上去。
如果再正规点,就把合并队列前的每帧清空数据独立出来,即弃用对象列表。

这些工作肯定不能每帧进行,而是开一个线程,就是DataBaseThread::run()。值得注意的是,这个线程只对pagedLod和proxyNode起作用,单纯加个cow.osg,是进不去的。

准确地说,是两个线程,一个应对本地数据,一个应对网络数据。应对网络数据的,就要写本地Cache。

对于上面的请求数据,还有个时限问题,即:超时不处理。当然,弃用对象列表中无用的数据该扔还得扔。
有效处理的数据,按kdtree组织。

每帧是如何更新数据的呢?1,发送无用数据列表到线程;2,从线程接收合并数据列表

合并列表和请求列表中的数据是一样的么?
不一样。有三种数据不会合并。1,请求列表中超时的;2,请求列表中没有父节点的;3,请求列表中需要编译的(即,等待编译列表)过期的

等待编译列表中的数据如何编译?
两种方式1,图形设备线程处理;2,立即编译

明白了这些,再看下边这张图,就没那么困惑了,一切都是很自然。
在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

分页数据库其实就是两个生产者与消费者 的相关文章

随机推荐

  • SQL注入原理-数值型注入

    小伙伴们大家好 本期为大家带来的是SQL注入原理 数值型注入的讲解 目录 SQL注入原理 数值型注入 编辑 1 测试是否存在注入点 2 判断字段个数 3 找出可以回显的字段 4 查询数据库的信息 1 查看当前的数据库 2 查看当前数据库的用
  • 操作系统调度算法

    在操作系统中存在多种调度算法 其中有的调度算法适用于作业调度 有的调度算法适用于进程调度 有的调度算法两者都适用 下面介绍几种常用的调度算法 先来先服务 FCFS 调度算法 FCFS调度算法是一种最简单的调度算法 该调度算法既可以用于作业调
  • ddt+BeautifulReport,报告展示用例描述,unittest用例统计

    当前使用的ddt来管理测试数据 需要读取测试数据内每一条case的描述 修改之前 修改途径 ddt源码内 将test data docstring get test data docstring func v 修改为 test data d
  • 【Java】得到当前股票信息

    import java io BufferedReader import java io InputStreamReader import java net HttpURLConnection import java net URL pub
  • Java TreeMap排序

    TreeMap实现了SortedMap接口 根据键自然排序 要求键必须是可比较的 要么指定Comparator比较器 如果没有Comparator比较器 键要实现Comparable接口 package Map import java ut
  • linux查看某文件夹下各个文件大小

    例如 我想查看 app 下各个文件的大小 cd app du h max depth 0 解释 cd app 进入 app 文件夹 du h max depth 0 查看文件夹下各个文件的大小 其中 0 代表查看 本文件夹 在这儿是app文
  • 如何实现前端项目的自动化测试?

    这其实就是我们常说的 UI自动化测试 针对这个问题 我先告知答题思路如下 1 什么是UI自动化 有什么优势 2 UI自动化实践中会遇到什么难题 3 如何解决难题 将UI落实到实践中 重点 4 UI自动化学习资料推荐 一 什么是UI自动化 为
  • 解决macos安装升级时报错安装所选更新时发生错误的问题

    系统有更新 下载到一半时点了取消下载 然后再等有空的时候点击安装更新一直失败 解决方法为 重新启动Mac 并按住Command R进入恢复模式 找到Terminal后输入csrutil disable 然后重启Mac 再次下载并安装更新 重
  • 第16章Stata面板数据分析

    目录 16 1短面板数据分析 案例延伸 延伸 关于模型的选择问题 16 2长面板数据 案例延伸 延伸 进行随即系数模型回归分析 面板数据 Panel Data 又被称为平行数据 指的是对某变量在一定时间内持续跟踪观测的结果 面板数据兼具了横
  • java: 错误: 不支持发行版本 5 报错的解决

    今天在使用maven配置好logback的依赖后 满心欢喜的去运行了一下 结果却报了 java 错误 不支持发行版本 5 在网上查了一下发现是jdk版本太高不支持编译java5版本的二进制 而这个问题常常是导入maven依赖时会遇到的 下面
  • React Hooks之useContext

    useContext const value useContext MyContext 接收一个 context 对象 React createContext 的返回值 并返回该 context 的当前值 当前的 context 值由上层组
  • Java多线程Jdbc_Java连接数据库 #01# JDBC单线程适用

    官方教程 包括 javase的基础部分 JDBC Basics 重新梳理 学习一下 Java连接数据库 相关的内容 因为最开始没有认真学多线程和JDBC 一直在自己写的多线程程序中维持下面的错误写法 多个线程共用一个connection c
  • Xshell安装及与服务器建立连接过程

    Xshell是Windows下一款功能非常强大的安全终端模拟软件 支持Telnet Rlogin SSH SFTP Serial 等协议 可以非常方便的对linux主机进行远程管理 Xshell下载地址 https www netsaran
  • 从站寄存器EEPROM内容解析之SII(Slave Information Interface)

    从站寄存器EEPROM内容解析之SII Slave Information Interface 一 EEPROM 的构造如下表所示 ESI 使用字编址 这里特别注意是字编址 那么实际上一个16进制的数 两个单位数0x1601 才表示一个单位
  • Epoll模型讲解

    首先我们来定义流的概念 一个流可以是文件 socket pipe等等可以进行I O操作的内核对象 不管是文件 还是套接字 还是管道 我们都可以把他们看作流 之后我们来讨论I O的操作 通过read 我们可以从流中读入数据 通过write 我
  • Linux 进程卡住了怎么办?

    在我们使用 Linux 系统时 如果网络或者磁盘等 I O 出问题 会发现进程卡住了 即使用 kill 9 也无法杀掉进程 很多常用的调试工具 比如 strace pstack 等也都失灵了 是怎么回事 此时 我们使用 ps 查看进程列表
  • Unity UGUI Canvas基础知识及优化

    unityUGUI源码 https github com Unity Technologies uGUI git 官方API https docs unity3d com cn 2018 4 ScriptReference Canvas h
  • keil错误 *** FATAL ERROR L250: CODE SIZE LIMIT IN RESTRICTED VERSION EXCEEDED 完美全部解决方法

    导言 今天我用keil5调试C51的程序 发现不行 连编译都编译不了 最后下载了一个C51 的keil5 依赖包 就可以编译了 可是后来又出现了一个问题 就是编译后他发生错误 错误信息 FATAL ERROR L250 CODE SIZE
  • 快门光圈感光度口诀_光圈快门感光度的口诀,赶紧收藏!

    艳阳十六阴天八 多云十一日暮四 阴云压顶五点六 雨天落雪同日暮 室内球场二秒足 客厅戏台快门八 上面说的数字都是光圈 比如多云十一日暮四 就是指多云时光圈用f11 日暮时光圈用f4 口诀里说的光圈所对应的快门速度 均指与相机ISO倒数相同
  • 分页数据库其实就是两个生产者与消费者

    再次看osg 最长的一帧 因为分页数据库适合于PagedLod和ProxyNode 一般调试还得准备数据 比较麻烦 突然想起 和我以前封装的引擎类似 分页数据库就是几个生产者与消费者 回过头来看这个图 看似复杂 实际上并不复杂 如果简化 只