计算矩阵A
和B
的乘法,其基本代码是
1 | for(i=0; i<n; i++) |
但这样的代码却存在以下的问题:
1、局部性较差
由于B
是按列访问的,所以其局部性较差
2、 不能保证A[i]
始终在缓存中
内层循环的执行可能导致A[i]
被缓存置换策略淘汰。
计算矩阵A
和B
的乘法,其基本代码是
1 | for(i=0; i<n; i++) |
但这样的代码却存在以下的问题:
1、局部性较差
由于B
是按列访问的,所以其局部性较差
2、 不能保证A[i]
始终在缓存中
内层循环的执行可能导致A[i]
被缓存置换策略淘汰。
Matploblib是Python生态中最为常用的绘图工具。然而这款工具不仅可以绘制静态图,还能借助于类似X11转发功能实现远程show。特别地,Maplotlib还可以绘制动态图,并导出成GIF。
Spark是MapReduce的下一代的分布式计算框架。相比更早期的MapReduce的Job和Task的两层,Spark更为灵活,其执行粒度分为Application、Job、Stage和Task四个层次。本文写作基于Spark 2.4.4版本的源码。
【TLDR】本来写文章确实是简练清楚为最佳,不过我发现Spark架构实在是很庞大,其中涉及到的一些架构知识我觉得都很有启发意义,因此这篇文章就被我写得很长。为了简化论述,我将部分细节放到了源码中作为注释,因此正文中是主要内容。
【注】本篇文章经授权已被腾讯技术工程知乎号和微信收录。
Scala和Kotlin、Clojure等一样是一种jvm语言,传说其复杂度可与C++一较高下。用下来感觉并不舒服,例如其中的implicit特性,能够减少很多代码的冗余,但另一方面,又会导致代码对新手而言的可读性变差。
这篇文章拆分自我从前的文章《使用Scala进行Spark-GraphX编程》。
Pandas库用来实现对CSV的快速处理,其在numpy之上提供了index和column机制。
异星工厂(Factorio)是一款有趣的游戏,随着游戏进程的发展,通过铁路实现超远距离的快速矿物货运的方式相比传送带和物流机器人有着稳定(高速运行的火车相比虫子可以说是无敌)、快速的特点。目前有关异星工厂铁路介绍的相关资料鱼龙混杂,缺乏系统性。为此,我总结了火车建造中的常见场景,并针对这些场景设计了对应的建造思路,以便玩家能够尽快建设自己的铁路物流系统。
本文将介绍如何在Ubuntu云主机(阿里云ECS)上配置饥荒联机版服务器。主要过程在steamcommunity已经讲得很详细了。我提供了一个傻瓜脚本。但有一些细节操作方面需要进一步明确。
本文来自我的文章分布式一致性和分布式共识协议太长,因此将其中的2PC和3PC部分单独列出来作为一篇文章。
本文来自我的文章分布式一致性和分布式共识协议太长,因此将其中的Raft部分单独列出来作为一篇文章。
Raft协议的设计者们认为Paxos协议非常难于理解,并且需要作出很多修改才能够应用到工程中,因此设计了偏重于实现的Raft协议,这甚至体现在他们的论文标题《In Search of an Understandable Consensus Algorithm(Extended Version)》上,此外作者也提供了一个C++版本的实现liblogcabin。Raft协议主要分为三个模块,Leader election、Log replication和Safety。
Raft将服务器节点分为Leader、Candidate和Follower三种,协调者被称为领袖/主(Leader),参与者被称为群众(Follower)。相对于其他的协议,Raft中的Leader更强,这体现在: