如何实现一个Web Server

最近重构了去年造的一个轮子 Vino。Vino 旨在实现一个轻量并且能够保证性能的 Web Server,仅关注 Web Server 的本质部分。在重构过程中,Vino 借鉴了许多优秀开源项目的思想,如 Nginx、Mongoose 和 Webbench。因此,对比上一个版本的 Vino,现在的 Vino 不仅性能得到提升,而且设计也更为优雅、健壮 :D。

阅读全文

CUDA Lab: Sum of Squares & Matrix Multiplication

CUDA(Compute Unified Device Architecture)是显卡厂商 NVIDIA 推出的运算平台,是一种通用的并行计算架构,该架构使 GPU 能够解决复杂的计算问题。我们可以使用 GPU 来并行例如神经网络、图像处理等在 CPU 上运行起来比较耗时的程序,通过 GPU 并行计算可以大大提高算法的运行速度。

阅读全文

初探Webx之约定胜于配置

实习期间接触到了早有耳闻的Webx,于是很自然的按照官方文档运行了一个 Demo ,粗略的阅读了一下代码,发现并不能很快的梳理清Web请求的处理逻辑,以及视图层和控制层之间的关联关系。execute()为什么会被调用?doChinese()为什么会被调用?这是我当时的两个疑问,为了解答这些疑问,需要理解Web请求在Webx中经历的处理流程,为此我阅读了Webx部分源码,并以此文作为小结。

阅读全文

如何实现一个分布式RPC框架

远程过程调用(Remote Procedure CallRPC)是一个计算机通信协议。该协议允许运行于一台计算机的程序调用另一台计算机的子程序,而程序员无需额外地为这个交互作用编程。RPC的主要目标是让构建分布式应用更加容易,在提供强大的远程调用能力的同时不损失本地调用的语义的简洁性。

阅读全文

CSAPP: Attack Lab

Attack LabCS:APP一书中第三个实验,包括Part IPart II两部分,分别实现Code Injection AttacksReturn-Oriented ProgrammingCode Injection Attacks主要利用缓冲区溢出执行不安全的代码片段;当栈被标记为nonexecutable或者位置随机时,可以利用Return-Oriented Programming达到攻击的目的。

阅读全文

6.824 Lab 1: MapReduce

开始学习大名鼎鼎的MIT 6.824: Distributed Systems课程,我跟的是2016年的课程,课程的主要内容是读Paper和做Lab,使用的语言为Go。五一假期期间我基本做完了Lab 1,感觉难度还是相当大的。本篇文章是我对Lab 1的一个总结。

阅读全文

CSAPP: Bomb Lab

Bomb LabCS:APP一书中第二个实验,实验中的bomb实际上是一个程序的二进制文件,该程序由一系列phase组成,每个phase需要我们输入一个字符串,然后该程序会进行校验,如果输入的字符串不满足拆弹要求,那么就会打印BOOM!!!

阅读全文

理解Golang中的defer

关键字defer用于实现延迟调用,根据Golang官方的定义:A defer statement defers the execution of a function until the surrounding function returns. 。但是,当返回值与defer相互关联时,如果没有正确理解deferreturn真正的执行顺序,那么容易出现一些不可描述的现象。

阅读全文