iOS开发快速了解OpenGL基本概念
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了iOS开发快速了解OpenGL基本概念相关的知识,希望对你有一定的参考价值。
参考技术A作为一个一个ios底层开发小白,一直以来对于底层原理,都是一知半解的状态,希望从此时记录自己学习底层知识的过程,也希望对其他开发中可以有一个好的帮助,因为自己看其他人的博客时候,大多数作者都是基于自己认知的前提下,记录自己的知识,在我看来对于入门的人来说,非常晦涩难懂,所以希望自己的文章,可以更加帮助其他人循序渐进的了解更多关于 iOS 的知识。文章也会尽量一步步的探索更多业务开发之外的东西,对于任何方面的技能,都可以友善的帮助后来的开发者。文章中有任何错误,不恰当的地方,欢迎随时指正,多多交流才可以共同进步。想要学习 OpenGL 首先需要了解 OpenGL/OpenGL ES/Metal 三者之间的联系:
通俗来讲就是, Apple 作为大厂,肯定要发展自己的底层渲染技术,所以推出了 Metal ,在推出 Metal 之前,苹果的底层渲染也是基于 OpenGL/OpenGL ES 的,在 iOS 12.0以后,苹果摒弃了 OpenGL 的相关 API ,使用 Metal 作为自己的渲染技术,但是 OpenGL 相关的 API 依然可以使用,因为在 Metal 之前,苹果提供了非常丰富的关于使用 OpenGL 相关 API ,类似于苹果推出了 swift ,但是 OC 依然是自己主流语言一样。了解了相关的背景,我们接下来要知道图形 API 究竟是用来解决什么样的问题存在的。
OpenGL/OpenGL ES/Metal 在任何项目中解决问题的本质就是利用 GPU 芯片来高效的渲染图形图像。图形 API 是 iOS 开发者唯一接近 GPU 的方式。想要了解 OpenGL 就要先学习关于 OpenGL 的专业名词,了解了这些,才可以对以后的学习,有更加深刻的认识。
状态机在 OpenGL 可以这么理解, OpenGL 可以记录自己的状态(当前所使用的颜色、是否开启了混合功能等),可以接输入(当调用 OpenGL 函数的时候,实际上可以看成 OpenGL 在接受我们的输入),如我们调用 glColor3f ,则 OpenGL 接收到这个输入后会修改自己的“当前颜色”这个状态, OpenGL 可以进入停止状态,不再接收输入。在程序退出前, OpenGL 总会先停止工作;
这里有一个 iOS 中很经常听到的概念, 离屏渲染 ,很多人知道离屏渲染会对 APP 的性能造成较大的开销,但是却不知道原理是什么,相信大家了解了上面关于 OpenGL 关于交换缓冲区的概念后,有了一个更清晰的认识,即: Off-Screen Rendering 是需要开辟新的缓冲区的,不停地切换上下文的环境则是对性能的很大的消耗,所以在 iOS 开发中,我们应当尽量的避免离屏渲染。
在学习 OpenGL 的过程中,直接非常直观的掌握并理解这些概念并不是一件容易的事,但是至少需要在入门阶段,大致的了解这些概念的意思,然后通过后续的学习,慢慢的巩固前面学到的知识,温故而知新,一步步的打开关于 iOS 底层渲染知识的大门,学习的越来越深入,慢慢的回过头看以前的知识点的时候,就会豁然开朗了。
希望能一步步的记录自己学习的过程,慢慢进步,慢慢成长,文章中有任何错误的地方,欢迎指正。希望能多多交流,共同进步。
后端开发需要了解的基本架构概念
后端开发需要了解的基本架构概念
用户的浏览器/客户端向DNS服务器发送请求查找请求地址,然后发送请求。请求先到达负载均服务,负载均衡服务会随机选择正在运行的服务来处理请求,业务服务从数据库(mysql)缓存(redis)全文检索数据服务(elasticsearch)检索数据并返回。如果请求是我们需要监听的业务服务(登录、下单等),将业务数据发送到作业队列,job服务器异步处理。
DNS
域名系统(Domain Name System 缩写 DNS)。它作为将域名和IP地址相互映射的一个分布式数据库,能够使人更方便地访问互联网。
例如:google.com对应的 IP 地址为 85.129.83.120。可以将 DNS 视为互联网的电话簿。
负载均衡
服务器负载均衡提供了水平扩展服务资源的能力。服务器负载均衡服务将传入的请求代理到一组应用程序服务器中的一个,这些应用程序服务器通常是彼此的克隆/镜像,并将来自应用程序服务器的响应发送回客户端。应用程序服务器中的任何一个都应该以相同的方式处理请求,因此只需将请求分布在一组服务器上,这样它们都不会超载。
水平扩展的好处 水平扩展允许您通过让每个应用程序后端(Web 服务器、数据库、X服务等)运行在不同的服务器上来最小化地耦合应用程序后端的不同部分。因为为了简单起见,东西会中断、服务器随机崩溃、网络退化、整个数据中心偶尔会离线、拥有多个服务器可以让您计划中断,以便您的应用程序继续运行。
应用服务器
应用服务器执行处理用户请求并将数据发送回客户端的核心业务逻辑。通常与各种后端基础设施进行通信,例如数据库、缓存层、作业队列、搜索服务、其他微服务、数据/日志队列等。
数据库
一般情况下每个程序都利用一个或多个数据库来存储信息。数据库提供了定义数据结构、插入新数据、查找现有数据、更新或删除现有数据、跨数据执行计算等的方法。在大多数情况下,Web 应用服务器与作业服务器直接对话。此外,每个后端服务都可能有自己的数据库,该数据库与应用程序的其余部分隔离。
缓存服务
缓存服务提供了一个简单的键/值数据存储,可以在接近 O(1) 的时间内保存和查找信息。应用程序通常利用缓存服务来保存昂贵计算的结果,以便可以从缓存中检索结果,而不是在下次需要时重新计算它们。应用程序可能会缓存来自数据库查询的结果、对外部服务的调用、给定 URL 的 HTML 等等。Google 会缓存“手机”或“电脑”等常见搜索查询的搜索结果,而不是每次都重新计算它们。两种目前最广泛使用的缓存服务器技术是 Redis 和 Memcache。
队列和调度任务
大多数程序需要在后台异步执行一些和响应请求没有直接关系的逻辑。例如商城业务下单的短信通知。最简单的是先进先出 (FIFO) 队列,每当应用程序需要运行作业时,无论是按某种常规计划还是由用户操作确定,它都会简单地将适当的作业添加到队列中。
数据检索服务
当系统数据量上了10亿、100亿条的时候,普通的数据库已经无法满足我们的需求,这就需要数据检索服务。目前主流的是elasticsearch一个分布式多用户能力的全文搜索引擎。它利用倒排索引快速查找包含查询关键字的文档。而且支持插件机制,分词插件、同步插件、Hadoop插件、可视化插件等。
CDN
CDN(内容分发网络)CDN是构建在现有网络基础之上的智能虚拟网络,依靠部署在各地的边缘服务器,通过中心平台的负载均衡、内容分发、调度等功能模块,使用户就近获取所需内容,降低网络拥塞,提高用户访问响应速度和命中率。CDN的关键技术主要有内容存储和分发技术。
以上是关于iOS开发快速了解OpenGL基本概念的主要内容,如果未能解决你的问题,请参考以下文章