精华内容
下载资源
问答
  • 双路CPU、显卡交火、SLI技术日趋衰退曾几何时,双路XEON加SLI、交火矿卡再加矿龙电源的搭配,成为垃圾佬手中最完美的跑分利器。而今,这股浪潮逐渐褪去,是双路平台不够Sao了?还是价格不够香了呢?X99配洋垃圾双路...

    双路CPU、显卡交火、SLI技术日趋衰退

    曾几何时,双路XEON加SLI、交火矿卡再加矿龙电源的搭配,成为垃圾佬手中最完美的跑分利器。而今,这股浪潮逐渐褪去,是双路平台不够Sao了?还是价格不够香了呢?

    e9c01f7d1374947ae3d4d9e78d7b2a5f.png

    X99配洋垃圾双路E5志强、矿渣Vega64交火的日子已逐渐远去,越来越多的垃圾佬不再迷恋廉价双路系统。

    其实都不是~

    不论是CPU还是GPU的双路并联方案,近年来确实在逐步走衰。这其中的核心原因,细说起来也就以下几个方面。

    第一、双路方案缺乏足够普及的OS、应用软件优化

    1、双路CPU优化适配有限,个人用户难享福泽

    除了面向专业领域的个别应用程序(操作系统)之外,双路CPU并不能发挥“账面参数”优势。对于个人用户而言,IPC性能、架构优势、时钟频率,依然是影响日常应用流畅度的核心因素。

    f399d5c53e7ee22b6e91c35ae894ba37.png

    CPU优秀的架构设计以及时钟频率,对于个人用户来说,比线程数影响更多

    因此,在制造工艺尚处劣势的Intel,依然可以凭借陈旧但不落后的14nm CPU产品,在高时钟频率上和7nm的AMD CPU一较高下。而对个人用户来说最常见的游戏、流媒体播放、日常办公和社交软件的使用表现上,6线程的Intel CPU对比12线程的AMD CPU差距并不明显。

    caf403180451e05d2d79ada8df629181.png

    不论是默频还是OC环境下,6线程的i5在游戏表现上并不输12线程的Ryzen

    同样的,以往用于入门级服务器、高性能计算领域的双路CPU系统亦是如此。它们并不会追求过高的时钟频率(而时钟频率对热功耗影响甚重),而是在持续的、多重任务、大数据吞吐量运算环境下提供长续航高运算能力。比如在高码流媒体编辑、数学运算、数据建模、设计渲染等领域,双路CPU在应用程序配合的环境下,几乎可以等效倍增提升运算效率

    c3c114874c7a8826c9d8a8216646f7b4.png

    双路CPU在有程序适配的环境下,可以获得等效倍增的性能提升

    然而在常见的游戏及绝大多数日常软件应用中,双路16线程的2.6GHz XEON至强处理器,或许都比不上一颗4.2GHz的i3-9100F更为流畅。

    2、多显卡交火、SLI方案亦缺乏游戏优化的支持

    020a59b407655588ddbabfecf1b4b33b.png

    购买顶级旗舰显卡,动辄上万元的开销难以消受,但两张便宜显卡并联一波,会不会很香?

    如果问你哪款3D应用对多路显卡交火、SLI技术支持最为完善?相信你的答案无外乎3Dmark和鲁大师(下图):

    8ae88c077f538b5474f72685980b7f94.png

    两张丐中丐版RX470交火之后,显卡测试得分提升了62%

    50374a5e6488a29ccdbbac3d79fcf0c6.png

    而在3DMark测试中,显卡单项成绩在双卡交火后提升了92.5%之巨!

    不过,实际游戏表现如何呢?其实大家心中早已有数,测试软件跑分的提升,和日常游戏的提升基本没有太大关系,甚至还会开倒车:

    11d37dc78634fb4596e300118f7cefc4.png

    GTA V游戏帧数提升不足15%,且并不稳定

    3f2cc6b86b2df219a319abcceca0af87.png

    LOL游戏帧数提升为负,两张显卡都在低功耗运行

    2daeb1fa87d153e48212d8baf43abcb1.png

    PUBG来得更干脆,双卡交火还不如单卡帧数高

    和双路CPU环境类似,缺乏相应的游戏环境支持,两张显示卡并联运行的效率往往大打折扣,甚至有的游戏中还不如单卡速度稳定。

    03bc2e9e0338efb638474883b50bbfd0.png

    因此,AMD、nVIDIA这两家核心GPU制造商,近些年也不再生产类似GTX690、HD7990这一类单路并联式双核显卡。一来设计、量产成本高昂,而来供电规模、热功耗太可怕(一般都在400~500W以上),随之而来的就是性能表现、质量可靠度方面难以保证。

    d0c76409507d3d854c4c038190d6efd0.png

    10年前经常能看到的单路多核(单卡交火、SLI技术)卡皇,现在也难觅其踪了

    fff059f36ddaf0da52e19ec353869c60.png

    另外在PC行业整体趋冷的大环境下,游戏开发商也减少了对多显卡模式下的游戏优化工作,导致目前越来越多的游戏都不再支持SLI或者交火技术。

    关于双卡交火的简单测试可参阅下文:

    • 《¥598买显卡鲁大师跑24万分,游戏表现到底如何,矿渣交火晒单》

    第二、双路系统配套平台昂贵的投入成本

    双路CPU、GPU的投入成本是相当高昂的:

    对于双路显卡来说,这一点倒没什么太大问题,毕竟大部分中高端主板都自带多条PCIE16X、8X扩展槽,消费者只需多花额外的显卡投入即可。而对于双路CPU来说,这一问题就比较头疼了:

    额外的高档电源支出;额外的高档主板支出;额外的高档散热系统支出;额外的高档机箱支出;亟待插满的扩展槽(内存、硬盘、PCIe等等)。
    4c8cf2a9604d413e15011a076b2a934e.png

    一张高品质双路CPU主板的尺寸需求、价格、供电需求、散热需求都是用钱堆出来的

    对于专业用户来说,高额投入就意味着高效的生产力回报。不过对广大普通玩家而言,你只不过是打开了一个深不见底的“钱坑”,需要不断用“¥”去填满它。对于个别强迫症患者,双路主板上那些数不清的各类扩展槽都是你忍无可忍、无须再忍的“吸金陷阱”,插满内存、插满扩展槽是你平复内心波澜的最终归宿。

    22f76fb59a4bc37a4cc3d6a630e95b2c.png

    更大、更重、更贵的双路系统专用机箱也是必不可少的

    当然了,最终的使用感受,或许只能依靠评测软件得分来给你安慰了。咳咳,但对于有钱任性的土豪大佬们,谈钱太伤感情了╮(╯▽╰)╭。

    第三、主流CPU、GPU制造商青睐单路多核方案

    1、双路CPU向单路多核方案的转变

    在制造工艺欠缺、架构设计受局限的年代,一张晶圆能够切割出来的核心模块是非常有限的。在10年前,双核4线程、4核8线程的处理器已经是制造工艺的中上水准,因此打算提升单机运行效能,采用双路系统打造8核16线程的计算方案非常合理(且相对廉价)。

    ecb263fc711df84414677f31af42f16d.png

    但随着制造工艺的提升,从10年前的45nm、32nm提升到现在的14nm、7nm之后,CPU制造商可以轻松制造10核心20线程、32核心64线程的个人电脑CPU。而在服务器领域,64核心、128线程的单路CPU也已成为主流。在此基础上,昂贵、复杂的双路系统在性价比和中长期维护成本方面的劣势就比较明显了。

    242efd1fd0999ec13f3376206a64bdac.png

    代号Rome的EPYC 7H12处理器,具备64核心128线程,功耗仅280W左右

    当然,最新的7nm Rome版EPYC霄龙处理器,依然具备多路环境支持,但这并不影响单路7H12霄龙对双路20核金牌XEON的碾压。

    2、GPU统一运算引擎方案地位提升

    不论是nVIDIA的CUDA还是AMD的RDNA架构,和前述CPU多核方案类似,新型显示卡在制造工艺提升的辅助下,可以为单路GPU核心构建数目更为庞大的统一运算引擎。

    810c8c9de861ffb96be7a687dd1fdfab.png

    20年来AMD(ATi)GPU的引擎架构演变

    对GPU制造商而言,针对单GPU计算引擎的优化显然更加直接、高效。

    在设计源头利用先进制程打造包含更多CU(计算单元)、更多SP(渲染处理单元)的GPU,显然比费心优化桥接双卡的驱动程序轻松得多。而后者的工作强度、复杂程度、迭代更新要求堪称地狱级水平~

    a64c90a672babf2a6ca0823a297ffec9.png

    因此我们可以看到,在AMD最新一代的Navi显示卡上,已经非常干脆地砍掉了用于多路环境的物理交火桥接器(下图),并在驱动层面也大幅削弱了多卡支持权重。

    55ff5dba33dd20d2ad4e08e21350ab51.png

    砍掉CF金手指的操作,苏妈自上代Polaris就开始布局,没想到在Navi这代砍得更绝~驱动都不提了

    由此可见,多路显示卡未来的衰落趋势会比CPU来得更直接。除非GPU制造商能够从驱动底层,研发出非常简洁、统一、并且为微软(操作系统、DX层面)、游戏开发商乐于认可的多路GPU增强协议方案,否则民用消费领域的交火、SLI配置只能日渐衰败、直至隐退于江湖。

    总结

    不论是双路CPU方案还是AMD、nVIDIA两家的CrossFire交火、SLI并联技术,它们更像是因计算机制造业工艺不足、性能不济而带来的衍生品。

    如果再深入一点,可以理解为十几年前软件行业对硬件性能有着更高的性能要求,CPU、GPU性能跟不上软件、游戏的发展,因此带来这些双路CPU、多路GPU并联技术。

    8d7c61c8d1093cab199eaaacecbdf346.png

    而今,抛开服务器、计算中心等专业领域不谈,CPU、GPU等硬件性能过剩的苗头又开始逆转。

    回头想想,你上次花大价钱升级、购置的电脑产品,是不是为了玩PUBG吃鸡、大表哥、战地5?如果不是这几款超级大作的诞生,外加2K、4K显示器的普及,恐怕绝大多数PC用户都没有太大兴趣升级电脑吧?

    69378240e721a1ed5a3c6ebda2a48dfe.png

    据说荒野大镖客2也没有正式支持多显卡技术,需要交火、SLI玩家手动修改游戏文件才能带来小幅提升

    以上就是数码君对双路PC系统和多显卡交火技术逐步式微的一些简单看法,PS:以上内容不适用于服务器、大型数据运算、HPC计算中心等领域。欢迎大家在评论区分享一下您的双路CPU、多路显卡使用体验!感谢阅读本文,我们下期内容再见!ヾ(•ω•`)o~


    相关阅读:

    • ¥598买显卡鲁大师跑24万分,游戏表现到底如何,矿渣交火晒单
    • 秒杀RTX2060!¥340买到鲁大师20万+分数的显卡是什么体验?
    • ¥19块钱全新24W乐视QC3.0快速充电头,拆解评测
    • ¥12块钱的4口USB充电器,满足垃圾佬桌面刚需
    • 迪兰恒进RX580 4GB显卡,¥329元包邮开车
    展开全文
  • 烧火游戏(双向BFS)

    2018-10-24 21:22:32
    题意 有一个n*m的草地和空地,#表示草地,其中...采用双路BFS的思想,每次加入两个点进行BFS,然后判断条件(这些都是模板),这里要进行多次BFS,即每次烧的两块草地不一样,取最小值。。 #include<i...

    题目链接:点击打开链接

    题意

    有一个n*m的草地和空地,#表示草地,其中只有草地能被点着,可以任选两块草地进行点着,每块烧着的草地在1s后会延伸到上下左右的格子,问烧完所有格子需要多少时间。如果不能烧完,输出-1.

    题解

    采用双路BFS的思想,每次加入两个点进行BFS,然后判断条件(这些都是模板),这里要进行多次BFS,即每次烧的两块草地不一样,取最小值。。

    #include<iostream>
    #include<cstdio>
    #include<algorithm>
    #include<cstring>
    #include<string>
    #include<queue>
    #include<vector>
    using namespace std;
    const int INF = 1e5;
    const int maxn = 20;
    struct node{
    	int x,y,tot;
    };
    int t,n,m,ans=INF;
    char s[maxn][maxn];
    bool vis[maxn][maxn];
    
    vector<node> g;
    
    void init()
    {
    	memset(vis,0,sizeof(vis));
    	memset(s,0,sizeof(s));
    	ans = INF;
    	g.clear();	
    }
    
    bool check(int x,int y)
    {
    	if(s[x][y]=='#'&&!vis[x][y]&&x>=0&&x<n&&y>=0&&y<m)
    	 return true;
    	return false;
    }
    
    bool judge()
    {
    	for(int i=0;i<n;i++)
    	 for(int j=0;j<m;j++)
    	 {
    	 	if(s[i][j]=='#'&&!vis[i][j])
    	 	  return false;
    	 }
    	return true;
    }
    
    int bfs(node n1,node n2)
    {
    	queue<node> q;
    	memset(vis,0,sizeof(vis));
    	q.push(n1);
    	q.push(n2);
    	int depth = 0;//当前的值
    	while(!q.empty())
    	{
    		node a = q.front();
    		q.pop();
    		if(vis[a.x][a.y]) continue;
    		depth = a.tot;
    		vis[a.x][a.y] = 1;
    		if(check(a.x-1,a.y))
    		{
    			node next;
    			next.x = a.x-1;
    			next.y = a.y;
    			next.tot = a.tot+1;
    			q.push(next);
    		}
    		if(check(a.x+1,a.y))
    		{
    			node next;
    			next.x = a.x+1;
    			next.y = a.y;
    			next.tot = a.tot+1;
    			q.push(next);
    		}
    		if(check(a.x,a.y+1))
    		{
    			node next;
    			next.x = a.x;
    			next.y = a.y+1;
    			next.tot = a.tot+1;
    			q.push(next);
    		}
    		if(check(a.x,a.y-1))
    		{
    			node next;
    			next.x = a.x;
    			next.y = a.y-1;
    			next.tot = a.tot+1;
    			q.push(next);
    		}
    	}
    //	for(int i=0;i<n;i++)
    //	{
    //		for(int j=0;j<n;j++)
    //		 cout<<vis[i][j]<<" ";
    //		cout<<endl;
    //	}
    	if(judge()) {
    		return depth;
    	}
    	return INF;
    }
    int main()
    {
    //	freopen("d://test.txt","r",stdin);
    	cin>>t;
    	for(int cnt=1;cnt<=t;cnt++)
    	{
    		init();
    		cin>>n>>m;
    		for(int i=0;i<n;i++)
    		 scanf("%s", &s[i]);
    		for(int i=0;i<n;i++)
    		 for(int j=0;j<m;j++)
    		 	if(s[i][j]=='#') {
    		 		node a;
    		 		a.x = i;
    		 		a.y = j;
    		 		a.tot = 0;
    		 		g.push_back(a);//采用vector,符合条件的push进去
    		 	}
    		int len = g.size();
    		for(int i=0;i<len;i++)//对符合条件的进行遍历,每次bfs两个,注意不重复
    		 for(int j=i;j<len;j++)
    		 {
    		 	ans = min(bfs(g[i],g[j]),ans);
    		 }
    		 printf("Case %d: ",cnt);
    		if(ans==INF) cout<<"-1"<<endl;
    		else cout<<ans<<endl;
    	}
    	return 0;
    }
    展开全文
  • 计蒜客-双人游戏 dp

    2019-01-26 09:28:27
    ... 题解: 这道题想了半天没想到好的方法,看了答案的代码后才恍然大悟。 从左上角和右上角出发最终...理由: 假设2条路径已经交于1点了,由于一条只能往右(下)发展,另一条只能往左(下)发展,所以如果...

    题目链接 https://www.jisuanke.com/course/709/36579

    题解: 这道题想了半天没想到好的方法,看了答案的代码后才恍然大悟。

    从左上角和右上角出发最终会形成2条路径,这2条路径肯定是相交的。要使积分和最大,交点肯定只有1个(解此题的关键所在)。

    理由: 假设2条路径已经交于1点了,由于一条路只能往右(下)发展,另一条路只能往左(下)发展,所以如果有多个交点的话,这多个交点必定是连续的。然后2条路继续扩张,扩张来达到新的点,即2条路不再相交的地方,这时,对于其中一条路来讲,要达到此时新的一点,既可以走刚才那条有几个交点的路,也可以走交点旁边空白的路再到达此时的点,这样能获得更多积分。(感觉说得不太清楚,只要能理解到只能有1个交点这题就迎刃而解了)

    #include <cstdio>
    #include <cstring>
    #include <algorithm>
    #define MAXN 550
    using namespace std;
    int dp1[MAXN][MAXN],dp2[MAXN][MAXN],dp3[MAXN][MAXN],dp4[MAXN][MAXN];
    int a[MAXN][MAXN];
    int n,m; 
     
    int main() {
    	scanf("%d%d",&n,&m);
    	for(int i = 1;i <= n;i++) 
    		for(int j = 1;j <= m;j++) {
    			scanf("%d",&a[i][j]);
    		}		
    	// 朝右下角走	
    	for(int i = n;i >= 1;i--)
    		for(int j = m;j >= 1;j--) {
    			dp1[i][j] = a[i][j] + max(dp1[i+1][j],dp1[i][j+1]);
    		}
    	// 朝左上角走
    	for(int i = 1;i <= n;i++) 
    		for(int j = 1;j <= m;j++) {
    			dp2[i][j] = a[i][j] + max(dp2[i-1][j],dp2[i][j-1]);
    		}
    	// 朝左下角走
    	for(int i = n;i >= 1;i--) 
    		for(int j = 1;j <= m;j++) {
    			dp3[i][j] = a[i][j] + max(dp3[i+1][j],dp3[i][j-1]);
    		}
    	// 朝右上角走
    	for(int i = 1;i <= n;i++)	
    		for(int j = m;j >= 1;j--) {
    			dp4[i][j] = a[i][j] + max(dp4[i-1][j],dp4[i][j+1]);
    		}
    	int res = 0;	
    	for(int i = 2;i < n;i++)
    		for(int j = 2;j < m;j++) {
    			res = max(res,a[i][j] + max(dp2[i-1][j]+dp1[i+1][j]+dp3[i][j-1]+dp4[i][j+1],dp2[i][j-1]
    			+dp1[i][j+1]+dp3[i+1][j]+dp4[i-1][j]));
    		}
    	printf("%d\n",res);
    	return 0;
    }
    

     

     

     

    展开全文
  • 天猫 11 狂欢夜,以下简称“猫晚”。晚会有丰富的节目以及多样的互动,用户可以在互动中得到 11 所需的购物权益。在这三年中,互动也从简单的 H5 互动逐渐演变成为依赖 Weex、 H5、游戏引擎的多样互动。

    一、猫晚简介

    天猫双 11 狂欢夜,以下简称“猫晚”。晚会有丰富的节目以及多样的互动,用户可以在互动中得到双 11 所需的购物权益。在这三年中,互动也从简单的 H5 互动逐渐演变成为依赖 Weex、 H5、游戏引擎的多样互动。
    在这里插入图片描述

    二、互动技术挑战

    1. 多平台同时直播

    2019 年猫晚在优酷、淘宝、天猫同时播出,同时附带了 13 种互动,其中不乏“叠叠乐”等流程复杂的游戏。开发会面临两个问题:

    a)渠道多、平台多。如何保证多平台开发效率且体验一致?

    b)互动类型多,每个互动都有独立逻辑,直播间需要将所有互动做串联。这些看似独立又有关联的互动,如何能高效、健壮地落地在不同平台呢?

    2. 年年创新、迭代速度快

    我们需要在既定的时间内,实现快速迭代,并且要保证用户的良好体验。那么又会碰到一些问题:

    1)迭代速度快。开发期只有几个月,客户端发版节奏无法满足。如何处理“发版”“快速迭代”这两个互相冲突的要求?

    2)PC 端、H5 如何跟上移动端的脚步?

    3. 如丝般顺滑的体验

    “双 11 天猫狂欢节”的品牌有多响亮,“猫晚”同时在线人数就有多高。人数多就等于“机型多”,每年做猫晚几乎什么型号的手机都能碰到。

    从服务端的角度来看,高同时在线就意味着服务端需要承担更高的 QPS,部署更多的机器。又会引出几个问题:

    a)同时在线高的情况下,如何保证每个用户的体验?

    b)高并发下如何保证服务稳定?

    三、技术策略

    为了更好的解决上述问题,我们提出了组件化、容器化方案。同时针对一些用户体验,从技术方面进行了优化。

    1. 组件化

    需要在优酷、淘宝、天猫至少三个平台同时落地互动,的前提下如何保证同时进行多个平台开发的效率呢?

    1)互动组件化

    经过需求分析发现,每种互动其实是个较为封闭的环,每种互动都在内部有套独立的逻辑。

    那是不是可以使用“组件化”的思想把不同互动拆分成“互动组件”然后分配出去,让每个开发只负责某一种或几种互动,通过内部 NPM 分发,在不同平台统一依赖这些“互动组件”,最终组装成直播间。

    在这里插入图片描述

    2)抹平平台差异

    组件化要想同时运行在多个平台上,就要处理平台差异,有两种选择:

    a)组件适配不同平台;

    b)统一标准,平台去兼容组件。

    两种方案没有好坏之分,但由于今年猫晚有着多达十多种互动模式,为了减少适配的工作量,选择了第二种方案。

    我们在平台上实现了一套“适配框架”,抹平不同平台的差异,它主要有三个职责:

    a)提供标准化 API,整合容器能力;

    b)提供标准化数据模型,不同平台组件可以获取相同的数据;

    c)提供节目单与互动服务通信,获取数据,控制互动组件的渲染逻辑。

    在这里插入图片描述

    这样,互动组件只需要对接“适配框架”,无需关心平台。

    3)组件标准化

    决定“适配框架”方案后,就需要统一组件的整个生命周期,使得每个组件都有统一的标准。在此基础上,我们提供了统一的“脚手架”,把控组件从创建到部署的过程:

    a)自动化创建组件托管仓库;

    b)自动生成初始化目录和模版;

    c)统一编码风格,统一 ES 版本;

    d)提供开发调试能力;

    e)自动化部署 NPM。

    4)方案

    在这里插入图片描述
    跨平台输出效果

    在这里插入图片描述

    2. 容器化

    每年的用户诉求都有所不同,每年的产品方案也在变化,必须要做好充足的准备。我们使用“容器”支撑不断变化的需求。

    1)热更新与选型

    客户端依赖版本发布、用户更新的策略来分发,比 H5 的分发效率低。但使用 H5 在移动浏览器环境下渲染复杂互动,会遇到性能瓶颈。选型方面,我们需求:

    a)热更新

    b)高性能渲染

    c)前端可以轻松上手

    框架上我们选择了 Weex,引用一则 Weex 官网的介绍:

    Weex 致力于使开发者能基于通用跨平台的 Web 开发语言和开发经验,来构建 Android、 iOS 和 Web 应用。简单来说,在集成了 WeexSDK 之后,你可以使用 JavaScript 语言和前端开发经验来开发移动应用。

    Weex 最终渲染的是 Native UI, 性能上要优于浏览器渲染。借助 Weex 的渲染远程 jsBundle 的能力,实现实时更新。

    Weex 的渲染引擎与 DSL 是分开的,在 DSL 选型上有两个选择 Rax 或 Vue,考虑到阿里集团内复用性上,选择了 Rax。Rax 在几届双 11 中也有很好的表现。同时,我们也保留了 Webview,渲染一些 H5 游戏。

    2)容器化的能力

    Weex 有两种方式来扩展能力:

    a)Module 可以封装一些接口,调用原生能力;

    b)Component 可以使用原生实现 Weex 组件。

    有了手段以后,容器能力需要封装到哪种程度?有两个选择:

    a)提供完整的业务组件,开箱即用。业务只需摆放位置,拼装;

    b)只提供基础能力,业务需要在此基础上实现业务逻辑。

    显而易见,想要支撑不断变化的需求,容器的能力不能太定制化。所以我们选择了第二种方案:

    a)在 Module 方面,容器提供了包括“流媒体、下载、相册、通信、埋点、键盘、支付、屏幕旋转”等 31 个 Module, 给容器扩展出近几十种原生能力;

    b)在 Component 方面,封装了“Webview、播放器、动画、进度条、聊天列表、弹幕”等 18 个 Component,扩展出了一些通用的 Native View,提高渲染性能。

    最后,我们抽离了直播间逻辑。使播放,通信等基础功能功能可以单独剥离出来,做为“直播间基础逻辑”,业务层可以选择继承方式来扩展自己的能力。

    3)模版,创造更多的搭配

    在日常的业务中,容器需要支撑多种多样的直播。有普通直播,也有猫晚这种大型互动直播。

    我们在容器中增加了“模版”的概念,把模版和直播类型建立起关系,通过不同的模版来支撑不同类型的直播。例如猫晚直播间会渲染“2019 猫晚模版”,展现给用户相应的界面。在模版加载过程中,加入了提前推送 Cache 的能力,使得大部分用户可以直接从本地加载模版,大大加快了首屏渲染的速度。

    4)输出到多终端

    搞定了移动端后,我们还需要处理 PC 和 H5,每个终端单独开发有些费时费力。在多端输出方案上,容器借助了 Rax 的跨平台渲染能力。剥离了组件的样式和业务逻辑,使得各终端可以共用一份业务逻辑,然后实现不同的样式,最后分别构建后运行在各终端的容器中。

    5)方案

    最终形成了容器化的方案:
    在这里插入图片描述

    最终渲染结果:

    在这里插入图片描述

    3. 体验优化

    在保证了产品需求落地后,还需要考虑如何保证互动有“丝般顺滑”的体验,下面介绍其中几个优化方案。

    1)互动游戏秒开优化

    今年双 11,用户在直播间内和现场进行了游戏互动。互动开始后,会进入选队阶段,用户在此阶段可以选择自己喜欢的队伍。选队阶段结束后,线上会和现场连线,一起进行一次互动游戏。

    游戏本身是依赖 H5 游戏引擎实现的,代码体积较大。在浏览器环境中,会遇到加载速度的挑战。网络层面上,每个用户网络环境不同,必然有网络不好的情况出现。用户可能会等待很长时间才能玩到游戏,体验非常不好。

    我们来看一下游戏加载的流程:

    在这里插入图片描述

    可以看到,服务器会在“选队阶段”开始一段时间后,发送“选队结束”的信号,让所有用户停止选队。等待晚会现场可以进行游戏后,会发送“游戏开始”信号,客户端会拉起 webveiw 面板去加载游戏。

    有两个阶段用户无法操作互动,需要等待。一个是“选队结束”信号收到后,直到收到“游戏开始”信号。随后会拉起 webveiw 面板;另外一个是“游戏开始”信号收到后,直到游戏加载成功。

    第一个阶段服务器发送“选队结束”、“游戏开始”这两个信号之间所需时间,是依据晚会现场的节奏,这个优化空间比较小。

    第二个阶段,游戏本身会做一些资源压缩,资源整合,可以从体积层面提高游戏加载速度。但是这也有局限性,游戏的图片、特效等很丰富,优化后的资源体积也是远远大于普通 H5 页面的,再叠加游戏初始化耗时,在普通网络环境下无法做到“秒开”。

    在“空间”层面上,我们无法再优化的情况下,我们是否可以从“时间”层面上做一些优化?从上面的流程图中可以看到,选队结束后,就已经可以做游戏的加载初始化工作了。随后游戏初始化完成,收到“游戏开始”指令后,只需拉起面板即可。这样游戏就会是提早准备好,大大缩短了等待时间。

    在这里插入图片描述

    2)互动与视频对齐

    晚会虽然是同步直播给用户的,但综合每个用户的网络情况以及客户端解码性能,每个用户在同一时刻看到的画面是不同的。以“互动开始”信号为例,“互动指令”是在主持人说出“开始”等关键信号时,下发给客户端。

    在这里插入图片描述

    “视频”和“互动”是两条互不相干的链路。我们把用户看到“视频画面”的时刻记为 T1,看到“互动”的时刻记为 T2。可以看出,“T1”与“T2”是没有任何关系的,除非凑巧,理论上用户是无法在看到“主持人喊开始”时,同时看到相应的互动。这样就会缺失“现场感”,互动直播的质量会大打折扣。

    那如何让用户看到相应视频时,同时看到相应互动呢?

    视频编码中的 SEI(附加增强信息),可以附带一些自定义数据。如果使用 SEI 附带互动标识,真正的互动数据则提早一些下发到客户端。互动可以实时监听解码视频时的 SEI 标识,发现当前互动的标识时,执行相应的操作。

    在这里插入图片描述
    这样用户就会在看到“主持人喊开始”时,同时看到相应的互动展示,就有了“现场感”。

    3)高并发下的服务端稳定性优化

    在互动开发中,避免不了客户端与服务端做一些数据的通信,其中又有许多,是程序自动触发的。尤其在互动直播场景下,用户会集中在某个时间段内做一些操作。QPS 监控上,往往可以看到一根尖刺,请求时机都比较集中。同时在线只有几千个人的情况下,没有什么优化的价值。但是如果像猫晚这种百万级别同时在线的互动直播中,就很有优化的必要了。

    这样会带来几个好处:

    a)可以大大降低 QPS,减少部署工作成本;

    b)减少集群机器数量,节省开支。

    同时在线越高,这些好处就越明显。在开发大型直播互动时,提前要建立起流量评估模型,方案细化到每一个接口。如果一些请求过于集中,就通过一些手段打散掉(在一个时间段内取一个随机时间点,发送请求)。后续演练场次里面,不断地验证模型的准确性。如果有不符合的地方及时修正。

    四、大型直播互动经验

    最后分享在参与大型直播互动中的经验:

    a)技术设计、选型,以稳定性为标准,客户第一,保证用户权益、用户体验;

    b)多进行演练,并且搜集数据,重点分析预期外指标,调整对应技术参数;

    c)多平台统一架构,一套代码,多平台部署,保证一致性;

    d)建立流量评估模型,消峰策略,降级策略;

    e)监控体系要齐全,预案要细化。

    作者介绍:阿里文娱前端专家 沐南

    展开全文
  • Unity学习之10——多人游戏与网络

    千次阅读 2018-06-26 22:58:20
    Unity学习之10——多人游戏与网络 作业要求: 选择一个以前的作业或自己选择一个小游戏,设计成网络游戏 效果图: 实现过程 在上一次作业的基础上,将AI小坦克改成双人对战坦克游戏。 主要参考资料...
  • 阿里十一以571亿元交易额收官,在财务数据上,当天阿里获得数十亿规模的营收,核心模式便是围绕流量的广告。阿里上市之后的首个“大考”,并无系统宕机等问题,支撑可谓完善。阿里宣称本次移动取得重大突破,45%的...
  • Diodes 公司 (Diodes Incorporated)推出单刀掷模拟开关产品74LVC1G3157 ,设计用于数字或模拟信号的多复用。这款开关解决方案的低导通电阻能够在音频信号路由时确保高完整性,因此非常适合用于手机、平板电脑...
  • 斯坦福大学计算机系和剑桥大学Offer,秋季将进入斯坦福大学学习。 10岁开始在国外上学;12岁学Scratch; 13岁学HTML &amp; CSS; 14岁开始学Python &amp; Java; 15岁用Python做了一个连连看的小...
  • 斯坦福大学计算机系和剑桥大学Offer,秋季将进入斯坦福大学学习。 10岁开始在国外上学;12岁学Scratch; 13岁学HTML &amp; CSS; 14岁开始学Python &amp; Java; 15岁用Python做了一个连连看的小...
  • 重磅炸弹——网易游戏雷火盘古校园招聘开始! 考研茫茫——空调教室 Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 3609 Accepted Submission(s): ...
  • 从零开始的C语言小游戏-预览区 2019.10-2019.12集合: 五子棋、象棋、双人格斗、汉诺塔递归示例 2020.1 - 2020.4月集合: 掘地求升、模拟笔记本、神庙逃亡、俄罗斯方块、打砖块物理版。 ...
  • 本文内容更新了十一活动,希望大家能够多多点赞,红包 福利送上。谢谢哈!有问题也可以私信或评论区留言传统的游戏本主打高性能,但由于需要安装散热模组(铜管+风扇)并且保证风通常,所以体型往往十分庞大,...
  • 本文内容更新了十一活动,希望大家能够多多点赞,红包 福利送上。谢谢哈!有问题也可以私信或评论区留言传统的游戏本主打高性能,但由于需要安装散热模组(铜管+风扇)并且保证风通常,所以体型往往十分庞大,...
  • 重绘,线程,缓冲,数据结构的应用 差不多是这大概有这些,如果不够的话我们再加。 首先,我们应该实现敌机下落,在这里大概思路和利用线程使小球下落差不多。不同的是,我在这里用到了三种敌机,分别为小、大、...
  • 重磅炸弹——网易游戏雷火盘古校园招聘开始! 考研茫茫——空调教室 Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 3609 Accepted ...
  • 4、炮打飞机 那天,阳光特别灿烂,计算机们唱着...”后来同学们是这么评价木鸿飞的,虽然木鸿飞与其他人一样,都是静悄悄地跨入机房,据后世好事者评价,木鸿飞那犀利的眼神,紧握的拳,坚定的步伐,早已将他出...
  • 当年叱咤风云的四泰坦我们游戏玩家,电脑里面有三样极其重要芯片—CPU、芯片组和GPU(显卡)。我们游戏玩家最看重的当然是GPU显卡了。记得几年前,一台高端游戏电脑的特点还是多显卡(SLI或者交火)的多显卡配置。这...
  • /*这是一个双人贪吃蛇游戏*玩家一 A S D W 控制方向*玩家二 上下左右 控制方向*当某玩家无可走的时候既输*/import java.awt.*;import javax.swing.*;import java.awt.event.*;public class HsGame extends JFrame ...
  • 电脑多屏显示,可以实现一个屏幕玩游戏,另一个屏幕看股票,工作娱乐两不误,特别是剪辑师职业一般都配备多屏显示,那么如何给电脑设置双屏或多屏显示,下面让小白系统教你具体操作方法吧。一、硬件要求(以Win10...
  • 电脑多屏显示,可以实现一个屏幕玩游戏,另一个屏幕看股票,工作娱乐两不误,特别是剪辑师职业一般都配备多屏显示,那么如何给电脑设置双屏或多屏显示,下面让小白系统教你具体操作方法吧。一、硬件要求(以Win10系统...
  • 这样不仅可以获得费用上的优惠,还可以南方的朋友和北方的朋友一起玩网络游戏。下面网吧路由器栏目小编说说WayOs路由器电信网通双线的设置方法。 首先请在WayOs路由器‘电信网通地址’中勾选上电信、网通为启用,...
  • Intel SE7501芯片组的内存系统支持双路交叉访问,数据带宽高达4.3GB/s,可满足游戏用户的大量迸发访问;2U机架式设计,完全胜任WEB、Email、FTP、File、高速缓存、消息、多媒体等多种应用,同时也可以应用于多数据...
  • 作者:韩克平 山东省淄博市...本节课笔者通过一系列的游戏,引导学生学会“单跳落”的方法,做到踏跳有力、落地轻巧、动作连贯,不仅发展了学生的腿部力量和连续跳跃的能力,而且让学生在游戏的过程中体验到运动的...
  • 电脑多屏显示,可以实现一个屏幕玩游戏,另一个屏幕看股票,工作娱乐两不误,特别是剪辑师职业一般都配备多屏显示,那么如何给电脑设置双屏或多屏显示,下面让小白系统教你具体操作方法吧。一、硬件要求(以Win10...
  • 好玩的室外团队游戏 好玩的室外团队游戏(一) 1、交头接耳:组织者准备一句较长且绕口的话(如:两点是冰三点是清四点是点两点是冷三点是澄四点是蒸这样的字知多少),各组(每组不少于12人)派一名代表上前默记住这句话...
  • 电脑多屏显示,可以实现一个屏幕玩游戏,另一个屏幕看股票,工作娱乐两不误,特别是剪辑师职业一般都配备多屏显示,那么如何给电脑设置双屏或多屏显示,下面让小白系统教你具体操作方法吧。一、硬件要求(以Win10系统...

空空如也

空空如也

1 2 3 4 5 ... 9
收藏数 171
精华内容 68
关键字:

双路游戏