精华内容
下载资源
问答
  • 后端使用多线程预测 我们使用多线程进行预测时只需要执行一次网络参数的初始化,从而达到 “拥有较快检测速度”的目标,但是主进程会一直占用GPU资源,这是因为目前GPUDevice中的Allocator属于ProcessState,它本质...

    后端使用多线程预测

    我们使用多线程进行预测时只需要执行一次网络参数的初始化,从而达到 “拥有较快检测速度”的目标,但是主进程会一直占用GPU资源,这是因为目前GPUDevice中的Allocator属于ProcessState,它本质上是一个跟随着进程的全局单例。在进程中使用GPU的第一个会话初始化它,并分配显存资源,在进程关闭时释放进程占用的资源,不然这个进程会一直占用这些资源。为了不让预测后程序中的tf一直占用显存,我们选择在子进程中进行预测,因为子进程中使用的GPU资源会随着子进程结束而释放。如果在主进程中直接使用predict函数,即使predict函数执行结束也会一直占用着显存,直到主进程结束才能释放它占有的GPU资源。这样做有一个好处,就是我们在网页后端主进程的Keras开始时会加载一个全局session,我们在这个session中初始化模型权重,这样它的所有子线程都可以使用这个session,因为多线程是在一个主进程中运行的,这样的话我们只需要在主进程开始时创建一个session,并初始化模型权重,就可以使用这个模型在这个进程的所有子线程中使用,每次预测都不需要重新加载模型权重。

    还有一个不可忽视的问题是,flask默认情况下使用的是多线程模式解决高并发问题,而在不同线程中默认的graph是不一样的(其实单纯使用Tensorflow时,不同线程的session也会不一样,那时候我们要为不同线程指定同一个session,但是Keras在主进程中创建了一个全局session,能覆盖所有子线程,所以使用Keras时不需要担心子线程的session不同,我们只需要担心graph不同就可以)。出于TensorFlow的session对象是支持多线程的,我们可以在同一个会话(session)中创建多个线程并行执行,因此,通过创建一个全局图(global graph)并将其设置为在每个子线程中使用。关于此问题在stackflow上的参考链接,代码实现如下:

    创建一个全局默认的图,并在Keras的全局session下创建一个model,这个model在创建后就立刻使用训练好的参数初始化网络参数。

    其中load_model()函数用于加载模型。

    从文件数组中读取出每张图像,并为这张图像的分类预测创建一个线程。我们需要等所有线程都执行完毕,才能返回结果,所以这里使用wait函数等待所有线程结束再return。在多线程指定的函数中,我们向predict中传入已经加载好的全局model,所以不需要再次初始化模型权重,这样可以节省大量的时间。在最终测试中,使用多线程预测12张图像仅需4秒(因为我的电脑显存只有2GB,所以会比较慢一些)。

    后端使用多进程预测

    实践表明,Keras维护的session不是进程安全的,即我们需要在我们创建的子进程中重新建立一个属于子进程的session,并为其分配GPU资源,否则在主进程中的session将会被他的子进程共享,最终导致死锁,程序会出现一些“莫名奇妙的bug”,比如说无限初始化模型权重。

    为每个子进程都建立一个属于他的session,这意味着每个子进程都要重新加载网络,并初始化模型权重,这是十分耗费时间的,起码在我的电脑上,模型加载训练好的权重需要30秒左右,这就意味着一张图像的处理最快也要30多秒,这是不可接受的,好在,我们的目的达成了,采用多进程的程序会预测一次释放一次GPU资源。代码实现如下:

    开始时我们只创建一个全局默认的图,一个图可以在多个session中执行,而一个session只能同时执行一个图,因为多进程不能共享session,所以不能共享网络模型参数,不能使用同一个model。

    在这里我们采用执行完一个子进程才能执行下一个子进程的策略,不然程序会同时为多个子进程分配GPU显存,这样程序会报“显存不足”的错误。可以看到上面报错的内容是“不能创建session”,下面的提示是“内存错误”,不能创建session的原因就是不能分配给session足够多的GPU显存。

    展开全文
  • 通过利用网页后端上的渲​​染来提高性能 苏联如何运作? 全世界的开发人员都在寻求提高网络性能的每一毫秒。 随着单页应用程序的趋势,出现了一些 我们以为:为什么要停止预紧? 苏联(超服务器端渲染)将整个...
  • 前端与后端

    2018-05-24 21:43:17
    前端与后端(20180524)Outline.Web front-end development What is Web front-end developmentCore TechnologyDutyWeb back-end development What is Web back-end developmentCore TechnologyDutyCoopration1.1 ...

    前端与后端(20180524)

    • Outline.
    • Web front-end development 
      • What is Web front-end development
      • Core Technology
      • Duty
    • Web back-end development 
      • What is Web back-end development
      • Core Technology
      • Duty
    • Coopration

    1.1 What is Web front-end development(什么是前端)

    Web前端开发是从网页制作演变而来,名称上有很明显的时代特征。在互联网的演化进程中,网页制作是 Web1 .0时代的产物,早期网站主要内容都是静态,以图片和文字为主,用户使用网站的行为也以浏览为主。随着互联网技术的发展和 HTML5CSS3的应用,现代网页更加美观,交互效果显著,功能更加强大。

    1.2Core Technology(核心技术)

    HTML: 服务器脚本语言(核心语言)
    cript:提高开发人员个人技能
    Unix&LinuCSS: 美观
    JavaSx:基础技能
    各种框架: 提高开发速度

    1.3 Duty(职责)

    1、使用Div+css并结合Javascript负责产品的前端开发和页面制作; [ 2]
    2、熟悉W3C标准和各主流浏览器在前端开发中的差异,能熟练运用DIV+CSS,提供针对不同浏览器的前端页面解决方案;
    3、负责相关产品的需求以及前端程序的实现,提供合理的前端架构;
    4、与产品、后台开发人员保持良好沟通,能快速理解、消化各方需求,并落实为具体的开发工作;
    5、了解服务器端的相关工作,在交互体验、产品设计等方面有自己的见解。

    2.1 What is Web back-end development

    首先我们要先对一个网站的架构有基本的了解,网站/软件的组成由:网站后台程序+前端页面+域名+服务器+数据库,这几大项组合在一起,才是我们平常所访问的平台。
    一般我们访问一个平台的时候,所看到的基本都是前端内容,而前端内容又通过用户点击,然后触发后台的功能和数据库。所以我们可以访问浏览很多很多网页或者使用一些平台上特定的功能。
    其实做后台的很多方向,部门很多,不同部门做后台的做的事情也不一样。要求熟悉linux,tcp/ip是必须的。
    涉及到后台的, 一般都是要跟数据库打交道的大型数据量的处理问题。
    以类 client - server 为基础的架构, 或者变形后的架构。
    客户端处理用户的输入和数据, 然后大量的客户端(多个客户端的多种数据) 反馈到服务端统一处理和协调, 然后服务端对客户端发出相应的指令。
    其中 后台程序 代表的就是服务端的程序。 包含以下几点:
    1. 网络通信, 要跟远程的client打交道,只能用网络
    2. 并发 和 并行处理:多个客户端可能在同一时间同时需要处理同一个类型的数据, 谁先谁后,谁的有效谁的无效? 服务端的并发,同步显得非常重要。 同理,每个客户端外表看起来都是立刻接收到服务的,这需要并行化处理。
    3. 数据库设计。 大量的数据,必须通过数据库进行管理。但是频繁的数据库写入会导致性能下降,所以要有合理的数据库设计,以及读写控制设计。 然后数据库的备份设计, 万一down掉了怎么办,只能用备份的。这一点在银行等电子商务的后台设计中是重中之重。
    4. 良好的扩展性的架构, 后台一直在变的, 因为客户端的需求一直是增加的, 不能因为为了添加一个新功能,影响到旧的功能。

    2.2 Core Technology

    1、学习HTML和CSS。HTML(超文本标记语言)是网页的核心,学好HTML是成为Web开发人员的基本条件。学习CSS了,它可以帮你把网页做得更美观。利用HTML和CSS模拟一些你所见过的网站的排版和布局(色彩,图片,文字样式等等)。

    2、学习javascript,了解DOM。JavaScript是一种能让你的网页更加生动活泼的程序语言。学习JavaScript的基本语法,学会用javascript操作网页中dom元素。接着学习使用一些javascript库,比如jquery是大部分WEB开发人员都喜欢用的,通过Jquery可以有效的提高JavaScript的开发效率。

    3、了解Web服务器。学习一点Unix和Linux的基本知识,因为大部分Web服务器都运行在Unix和Linux平台上。

    4、学好一门服务器端脚本语言。目前流行的服务器脚本语言有:php、asp.net、jsp、ruby、python等。可以选一个自己喜欢的进行学习。

    5、学习数据库及SQL语法。要构建动态页面通常会使用到数据库,常用的数据库有SQLServer、Oracle、MySQL 等,它们都会遵循标准的SQL原则。通常asp.net 程序使用SqlServer数据库,PHP、java使用Oracle、MySQL数据库。

    6、学习使用Web框架。当你掌握了HTML,CSS,JavaScript和服务器端脚本语言后,就应该找一个Web框架加快你的Web开发速度,使用框架可以节约你很多时间。

    2.3 Duty

    会写Java、php、c + + 等系列的一种语言代码,会写SQL语句,能做简单的数据库设计,会
    Spring和iBatis,懂一些设计模式等。主要做的就是网站或者软件,手机app后台的交互和互动,以及数据库体系;让其展现在前台;

    3 Cooperation

    前端作为模板,后端负责数据。
    展开全文
  • 通常会并行开发后端服务,以提供该UI所需的功能。随着应用程序用户群体的增长,就要开发与相同后端进行进行交互的移动应用。后端服务同时满足桌面和移动界面的要求。但是,在屏幕尺寸,性能和显示限制等方面,移动...
    为特殊前端创建后端服务
    
    创建单独的后端服务以供特定的前端应用程序或接口使用。当您想避免多个接口共享单个后端时,此模式很有用。


    问题背景
    应用程序最初可能定位于桌面WebUI。通常会并行开发后端服务,以提供该UI所需的功能。随着应用程序用户群体的增长,就要开发与相同后端进行进行交互的移动应用。后端服务同时满足桌面和移动界面的要求。


    但是,在屏幕尺寸,性能和显示限制等方面,移动设备的功能与桌面浏览器的区别很大。因此,移动应用程序后端的要求与桌面,Web UI有些部分会不同。


    这些差异导致后台的需求竞争。后端需要定期进行大更新才能为桌面,网页用户和移动应用提供服务。通常,每个接口小组完成各自的前端工作,导致后端成为开发过程的瓶颈。解决更新需求的冲突的同时为所有前端保持服务,为单一部署造成了很大的人力成本。



    由于开发活动侧重于后端服务,因此可能会创建一个单独的团队来管理和维护后端。最终,这将导致接口与后端开发团队之间产生隔阂,后端团队为了平衡不同UI团队的需求竞争而承担额外的负担。当一个接口组提出需要后端进行更改时,这些更改必须与其他接口组进行验证,然后才能提交需求到后端。


    解决方案
    为每个用户接口分别创建一个后端。对单个后端的行为和性能进行优化,以最好地满足前端环境的需求,而不用担心影响其他前端。



    因为每个后端都是特定于服务一个接口,所以可以针对该接口进行优化。因此,它将比通用后端更小,更简单。可能比通用后端开发起来更快。每个接口团队都有自主权来控制自己的后端,而不再依赖于共同的后端开发团队。这使前端团队在语言选择,发布节奏,工作负载优先级和后台功能集成方面具有更多的灵活性。


    问题和思考
    需要部署多少后端。
    如果不同的接口(如移动客户端)会提出相同的请求,请考虑是否需要为每个接口实现后端,还是单个后端就足够。
    实施此模式时,很可能导致跨服务的代码重复。
    面向前端的后端服务应仅包含客户端特定的逻辑和行为。通用的业务逻辑和其他全局功能其他地方进行管理。
    想想这种模式可能如何落实在开发团队的职责中。
    考虑实施这种模式需要多长时间。建立新的后端团队的努力是否会产生技术债务,而与此同时,要继续维护现有的通用后端。


    何时使用这种模式
    若维护通用的后端服务,会带来显著的开发成本。
    希望针对特定客户端接口的要求来优化后端服务。
    需要一个容纳多个接口的后端。


    这种模式可能不适用于:
    当多个接口对后台的请求类似或相同。
    当只有一个接口与后台进行交互时。
    展开全文
  • 文章目录背景流程梳理前端后端ORM 是干什么的?学习路线解释路线特别建议 背景 本人是一名 Web 前端开发,技术栈是 Vue 和 React,不会 Node。之前学过,但是因为一些原因(比如没有使用场景,很多概念无法理解,学...

    一、背景

    本人是一名 Web 前端开发,技术栈是 Vue 和 React,不会 Node。之前学过,但是因为一些原因(比如没有使用场景,很多概念无法理解,学完就忘等)一直也没有掌握。

    因为在 CMS 部门耳濡目染时间久了,感觉不学点后端有点说不过去,而且学起来之后发现也挺有兴趣的。但是对于一名前端开发(而且在学校的时候基本没学习)来说要学习的内容实在太多了,开始的困难在于理清各种技术都是干什么的以及它们之间的关系。现在刚刚有点眉目故记录一下,权当给需要的同学一些建议。

    二、流程梳理

    这里只简单的把后端的工作理解为:从数据库里取出数据并返回给前端。

    那么需要掌握的技术有:

    1. 一门原生后端语言(比如 Python)用来写业务逻辑,处理接口的参数;
    2. 这门语言的框架(比如 Django)跟前端框架一样理解;
    3. 数据库(比如 MySQL);
    4. ORM,这个上面说的 Django 就有,也有单独的 ORM 框架,比如 SQLAlchemy
    5. 其他……

    重点说一下 ORM 是干什么的:

    SQL语句是可以直接操作数据库的,比如 SELECT 语句可以获取数据。但在实际应用中很少直接使用SQL语句来操作数据库,而是使用 ORM(对象关系映射,Object Relational Mapping)

    就是 把数据库表中的每条记录映射成一个对象,可以通过 ORM 提供的一些函数来操作这个对象, ORM 底层会把这些函数转换成 SQL 语句。

    我选的语言是 Python,其他的语言也都是大同小异的。

    三、学习路线

    1. Python 语法

    不同版本之间差异可能比较大,注意项目中使用的版本。

    1. 需要注意字典类型和对象的区别,以及和 JSON 区别;
    2. Python 中 time datetime json 等内置模块的掌握;
    3. 列表推导,字典推导 等 推导式 也是重点内容。

    这个是基础,必须先掌握基本用法,不然后面进行比较困难。就像无论使用 Vue 还是 React 都要先掌握 Javascript。

    2. Django 框架

    也要注意版本。

    Tornado 也是一个 Python 框架,具体看你们项目中使用的哪个。个人感觉 Django 比较简单,可以作为入门。

    特别提示:Django 的文档内容特别多,不需要全部看完。可以看完 入门教程,视图层,模型层 之后就看项目代码,遇到不会的再查就可以了。

    3. ORM

    我的学习过程中这个是理解难点,前面已经解释过了。

    4. 数据库

    前面说 Python 是需要优先于其他知识掌握的,后面的几个可以并行学习。

    强烈推荐一个 B 站的教程,非常清晰易懂:【中字】SQL进阶教程 | 史上最易懂SQL教程!10小时零基础成长SQL大师!!

    B 站也有这个老师的 Python 教程,我还没看。。。

    5. Redis

    Redis 也是一个数据库,也推荐一个 B 站的教程:【狂神说Java】Redis最新超详细版教程通俗易懂

    四、名词解释

    以上是一些最基础的知识,是转后端必须掌握的。下面对一些迷惑过我的名词做一些解释,这些是随着学习加深也要掌握的:

    1. asyncio

    是 Python 提供的一个用来编写 并发 代码的库,使用 async/await 语法。

    2. SQLAlchemy

    Python 中最有名的 ORM 框架。

    3. mysqldb

    Python2 中用于连接 MySQL 服务器的一个库。

    注意这个库和 ORM 的区别:

    1. mysqldb 是用来 连接 数据库的,因为在操作数据库之前我们要先连接上数据库;
    2. ORM 并不能连接数据库,只是让我们用更简单的方式来 操作 数据库。

    4. pymysql

    Python3.x 中用于连接 MySQL 服务器的一个库。

    5. aiomysql

    用于从 asyncio 框架访问 MySQL 数据库的库。

    5. Supervisor

    supervisor 是 python 开发的通用进程管理程序,可以将普通的命令行进程变成后台 daemon,监控进程状态,当进程异常退出时可自动重启。

    6. Lua 脚本

    Lua是一种轻量小巧的脚本语言,用标准 CANSI C 编写并以源代码形式开放。其设计目的是为了嵌入应用程序中,从而为应用程序提供灵活的扩展和定制的功能。

    Lua是什么

    7. uWSGI

    • WSGI 是一种通信协议
    • uwsgi 同 WSGI 一样是一种通信协议
    • uWSGI 是实现了uwsgiWSGI 两种协议的 Web服务器

    uWSGI详解
    Nginx+uWSGI部署Python Web应用

    8. 虚拟环境

    在工作中经常会遇到多个项目使用不同版本的环境,需要为每个项目单独配一套环境。虚拟环境可以解决这个问题。

    9. 运维

    这就多了:Nginx,Docker,Kubernets,Linux。

    虽然大多数公司都有自己的运维,但是我们多多少少也是要了解一点。项目部署的时候也要配合运维写一些脚本文件,这个后面有机会再说。

    五、总结

    可以看到内容已经很多了,这还没完。上面列出来的是我们项目中使用到的(包括但不限于),但并不是每个项目都用了这么多。

    ❗️ 特别建议:

    计算机的基础知识真的特别重要,比如:

    1. 汇编语言(学习操作系统时要用到)
    2. 操作系统
    3. 数据结构,算法
    4. 计算机组成
    5. 计算机网络

    都是你上大学学的那些课程,真的很重要❗️

    以上。

    展开全文
  • 后端架构演进

    2018-08-22 16:30:00
    前端采用静态网页相关的技术,HTML + CSS + JavaScript,通过 AJAX 技术调用后端提供的业务接口。前后端协商好接口方式通过 HTTP 提供。 当后端不提供页面,只是纯粹的通过 Web API 来提供数据和业务交互能力之后...
  • 后端语言选型浅谈

    2016-08-04 13:59:21
    前不久回答了一个关于后端语言选型的问题,写的回答也让笔者...Web 后端语言的兴起是从静态网页向动态网页的发展所产生的,最早的动态页面技术就是 CGI 技术,将客户端的输入交给 CGI 程序,然后将 CGI 程序的输出返...
  • 前端渲染 vs 后端渲染

    2019-05-21 16:18:50
    前端异步流程工具 Promise √ Generator函数 Async函数 √ Node.js 提供的 nextTick 第三方的async.js 前端原生js提供的数据请求有两种 ...前端渲染 vs 后端渲染 前端渲染是通过ajax请求数据,然后通过js语...
  • 在现行的软件架构中,前端和后端是分离的,即前端只专注于页面渲染,而后台专注于业务逻辑,前端和后端是两个不同的工种,而前后端交互最常见的方式就是通过接口。 前后端分离架构 在正式说明前后台架构分离之前,...
  • Golang后端面试汇总-001

    2021-04-05 10:27:16
    比如 浏览器默认最大连接数是6,现在有十个资源同时加载,那么这十个里会有6个并行,4个与前6个串行。 在keepalive里有个问题就是如果能知道每个repose与其对应的request的话,并发的请求可以只需要一次TCP连接,这...
  • 后端 C++ 学习路线(转载总结)

    千次阅读 多人点赞 2020-10-31 22:59:36
    后端工程师软件基础自学路线(转载总结)学习建议学习路线1. C++基础数据结构与算法数据结构算法刷题(一直持续到找工作)操作系统操作系统&编译原理Linux内核 学习建议 对于技术岗,软件基础知识可以说是个人的硬...
  • 前端异步流程工具 Promise √ Generator函数 Async函数 √ Node.js 提供的 nextTick 第三方的async.js 前端原生js提供的数据请求有两种 ...前端渲染 vs 后端渲染 前端渲染是通过ajax请求数据,然后通过js语法...
  • 后端登录功能实现——token技术 内容参考自以下博客: https://www.yunliyunwai.cn/blog/detail/da87ec1283706f0c0995a9c235f2eb31(过度借鉴,请勿在意~) 【详细而又具体有逻辑的内容请直接点击链接访问,笔者...
  • 单任务并行计算,在非CPU Bound的场景下提高响应速度,降低时延。 与人有IO交互的应用,良好的用户体验(键盘鼠标的输入,立刻响应) 案例: 桌面软件,响应用户输入的是一个线程,后台程序处理是另外的线程; ...
  • java后端开发面试

    千次阅读 2019-04-26 22:38:45
    @TOC   ThreadLocal(线程变量副本)  Synchronized实现内存共享,ThreadLocal为每个线程维护一个本地变量。 采用空间换时间,它用于线程间的数据隔离,为每一个使用该变量的线程提供一个副本,每个线程...
  • 本文为博主2020年秋招提前批的c/c++后端开发面经整理,包括C/C++语言基础,计网,数据库,linux,操作系统,场景题,智力题和hr常问题。面试问题来自前人的工作和博主面试时遇到的值得记录的问题,其中面试题答案...
  • 前端与后端的分离,能使前端的开发脱离后端的开发模式,拥有更大的自由度,以此便可做前端工程化、组件化、单页面应用等。 2、尽量避免后端模板渲染 web 应用的渲染方式分为服务器端渲染和客户端渲染,当下比较...
  • 什么是分布式系统 分布式这一概念,一直都是后端工程师绕不过去的一个坎,今天,我们就一起来看看到底什么是分布式系统,又有哪些分布式技术世我们需要学习的。 根据百度百科的介绍,分布式系统(distribut...
  • Java后端社招面试个人总结

    千次阅读 2021-08-11 15:12:13
    近期面了一些后端的内容,准备先对其中一些内容进行总结下,便于个人加深理解。行文可能仅支持个人能看懂理解就行。如有理解不到位的地方请谅解。终结面试后再来一一回顾整理。当然,友情提示下:面试前最好是提前...
  • 后端技术基础知识总结

    千次阅读 2020-10-07 19:29:37
    HTTP重定向负载均衡 也属于比较直接,当HTTP请求到负载均衡服务器后,使用一套负载均衡算法计算到后端服务器的地址,然后将新的地址给用户浏览器,浏览器收到重定向响应后发送请求到新的应用服务器从而实现负载均衡...
  • Java后端面试问题总结

    2019-07-21 20:30:46
    2、解释一下并行和并发的区别 还可以,有研究过部分JDK源码,比如常用的集合类如HashMap/Hashtable、ArrayList/LinkedList、Vector等,还有Java5之后的并发包JUC如concurrentHashMap、Executor框架、CopyOnWrite...
  • 高并发(High Concurrency)是互联网分布式系统架构设计中必须考虑的因素之一,它通常是指,通过设计保证系统能够同时并行处理很多请求。 高并发相关常用的一些指标有响应时间(Response Time),吞吐量(Throughput...
  • 前端如何高效的与后端协作开发 1. 前后端分离 前端与后端的分离,能使前端的开发脱离后端的开发模式,拥有更大的自由度,以此便可做前端工程化、组件化、单页面应用等。 可以参考:前后端分离、web与static服务器...
  • 后端面试总结(转载请标明)

    千次阅读 2016-05-06 21:10:11
    架构 和 前端 的文章都已经置顶了,缓存和优化的还没写,因为事情比较多,时间不太够用,不过接下来都会写的,欢迎大家关注~JS中网页前进和后退的代码 前进: history.forward();=history.go(1); 后退: history....
  • 本文以淘宝的发展来说明后端架构的发展 文章目录概述 概述 本文以淘宝作为例子,介绍从一百个并发到千万级并发情况下服务端的架构的演进过程,同时列举出每个演进阶段会遇到的相关技术,让大家对架构的演进有一个...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 10,348
精华内容 4,139
关键字:

网页后端并行