流水线中的大冒险

流水线中的大冒险

上一节说到,流水线中的分支预测本身是为了提高整条流水线的并行度,为此,CPU做了很多努力,例如乱序执行,甚至于流水线本身也是为了这个目的而诞生的。 和 我们编写一般程序一样,顺序执行总是最简单、最安全的,指令被一条接着一条地顺序执行,没有人会思考任何有关并发的隐患。但是一旦踏入并发编程的范畴,似 乎就开始变得一团糟,你需要考虑数据竞争、锁、内存等等一系列问题。和分支预测一样,有时候你会采用一些试探…

Read More Read More

流水线中的分支预测

流水线中的分支预测

在现代CPU中,为了提高执行的性能,CPU的多个单元会同时执行多条指令。例如当取址单元正在寻找下一条指令前,上一条指令的译码和执行已经在进行中了,这一套机制被称作CPU流水线(pipeline)。 CPU 流水线架构把指令的执行分为了多个阶段,每个单元只负责完成指令执行过程中的一个阶段,而中间结果由专门的流水线寄存器暂存。这样理论上,一条指令的执行 假设被分为5个阶段,那么当5个单元同时运行一段时…

Read More Read More

从一个开发的角度看负载均衡和LVS

从一个开发的角度看负载均衡和LVS

在大规模互联网应用中,负载均衡设备是必不可少的一个节点,源于互联网应用的高并发和大流量的冲击压力,我们通常会在服务端部署多个无状态的应用服务器和若干有状态的存储服务器(数据库、缓存等等)。 一、负载均衡的作用 负载均衡设备的任务就是作为应用服务器流量的入口,挑选最合适的一台服务器,将客户端的请求转发给它处理,实现客户端到真实服务端的透明转发。最近几年很火的「云计算」以及分布式架构,本质上也是将后端…

Read More Read More

Hive Tips

Hive Tips

在Hive中,某些小技巧可以让我们的Job执行得更快,有时一点小小的改动就可以让性能得到大幅提升,这一点其实跟SQL差不多。 首先,Hive != SQL,虽然二者的语法很像,但是Hive最终会被转化成MapReduce的代码去执行,所以数据库的优化原则基本上都不适用于 Hive。也正因如此,Hive实际上是用来做计算的,而不像数据库是用作存储的,当然数据库也有很多计算功能,但一般并不建议在SQL…

Read More Read More

Linux IO调度器

Linux IO调度器

在现代计算机体系中,机械硬盘仍然作为大部分情况下的存储设备使用,而机械硬盘的访问相对内存差了多个数量级,主要原因在于机械臂转动的寻道时间太长,机械操作没法跟上电子信号的传递,所以OS不可能对每次I/O请求都直接作寻道处理,而是需要额外的工作。 在Linux中,这部分工作主要由I/O调度器完成。

支持多域名虚拟主机SSL/TLS认证的技术:SNI

支持多域名虚拟主机SSL/TLS认证的技术:SNI

早期的SSLv2根据经典的公钥基础设施PKI(Public Key Infrastructure)设计,它默认认为:一台服务器(或者说一个IP)只会提供一个服务,所以在SSL握手时,服务器端可以确信客户端申请的是哪张证书。 但是让人万万没有想到的是,虚拟主机大力发展起来了,这就造成了一个IP会对应多个域名的情况。解决办法有一些,例如申请泛域名证书,对所有*.yourdomain.com的域名都可以…

Read More Read More

证书链及在nginx下的配置

证书链及在nginx下的配置

通常为了保护Web通信传输,我们会使用SSL/TLS协议去同时实现加密传输和身份认证,这里需要在服务器端配置好CA证书。 CA证书分为两类:根证书(Root CA)和中间证书(Intermediate CA)。这里的证书我们用OpenSSL就可以生成,但是只有经过认证的CA机构签发的根证书才会被浏览器或其它设备信任,做法就是预先在浏览器或系统里内置可信的根证书。 但是根证书的使用是收到严格限制的,…

Read More Read More

生活的可能性

生活的可能性

我时常想起这么个问题:如果当初作了另一个选择,那么恐怕不会是现在的生活吧。 想想就觉得很奇妙,不同的选择,就把人引向不同的道路,有时候一不小心,又殊途同归。记得以前有个笔友在信里说,如果没有遇见彼此,也许生活是完全不同的另一番模样。 和大多数人一样,我也是个不喜欢太多变化的人。本质上人都害怕未知,害怕触碰甚至窥视自己不知道的领域。 但自己的内心又分明躁动不安,我经常反复问自己的一个问题是: 我究竟…

Read More Read More