Calvin's Marbles


  • 首页

  • 关于

  • 归档

  • 标签

  • 搜索

Bash介绍

发表于 2021-01-06

介绍Bash

阅读全文 »

Paxos算法

发表于 2021-01-06

本文介绍 Paxos 算法,包含 Basic Paxos,以及 Raft 作者提出的一个 Multi Paxos 的工程化实现方案。此外,还就 Raft 作者给出的 Paxos 习题进行探讨。

阅读全文 »

GCC 和 GLIBC编译

发表于 2020-12-13

GCC 是 C 和 C++ 的编译器,GLIBC 是 C 库,两个是不同的 Repo。编译顺序是先 GCC 再 GLIBC,这是因为编译 GLIBC 时对 GCC 的版本有要求。

阅读全文 »

pthread_rwlock库的实现

发表于 2020-12-11

pthread_rwlock系列函数是pthread库的读写锁函数。随着版本的不同,它的实现也不同。
本篇的组织是:

  1. 前置知识
    1. GCC的扩展内联汇编
    2. Futex
  2. 2.17和2.30两个版本的lowlevellock的实现
  3. 2.17和2.30两个版本的pthread_rwlock的实现
    我们的结论是:
    旧版GLIBC使用lowlevellock实现pthread_rwlock;
    新版GLIBC使用原子操作实现pthread_rwlock。
    因此具有不同的ABI
阅读全文 »

V8引擎编译

发表于 2020-11-21

本文介绍在一个较老的环境下编译 V8 引擎,并全静态地链接到既有的游戏服务上。原因是我们需要一个很新的能支持 WebAssembly 的 JS 引擎。经过调研,我们认为使用 V8 是最好的。

游戏服务使用 GCC4.4.6,这是一个非常老的版本,甚至不能完整支持 C++11 标准。而即使是很老版本的 V8 都需要完整的 C++11 支持(GCC 4.8+)。进一步地,最新版本的 V8 需要 C++14 标准的支持:

  • v8.h 中出现了诸如 std::remove_cv_t 的 C++14 的标准库函数
  • C++14标准编译出来的库也没办法直接和原游戏的目标文件进行链接

因此我们的方案是将游戏中对 V8 强依赖的模块升级成 C++14 标准,主要步骤如下:

  1. 从源码构建 GCC 和 GLIBC
  2. 从源码构建 V8 静态库 v8_monolith.a
  3. 将 V8 静态库、libc++、GLIBC 和游戏模块全静态链接
阅读全文 »

git基础概念和基础命令

发表于 2020-10-29

下面的一些 git 命令,在使用时常常不知所以,容易混淆,其实原因是对 git 的机制并不了解,因此在本文中介绍相关。

  1. reset hard/soft/mixed

    1
    2
    3
    $ git reset --hard
    $ git reset --mixed
    $ git reset --soft
  2. fetch/pull

    1
    2
    $ git fetch
    $ git pull
  3. reset/revert

  4. diff cached/HEAD

    1
    2
    3
    4
    5
    $ git diff --cached
    $ git diff --staged
    $ git diff HEAD
    $ git diff HEAD~1
    $ git diff HEAD^
  5. rev-list/log

    阅读全文 »

SVN从源码构建

发表于 2020-10-21

本文讲解SVN从源码的构建流程,和其中遇到的一些问题。

阅读全文 »

Redis Sentinel实现原理分析

发表于 2020-10-18

Sentinel(哨兵)监控Redis集群中Master状态,是Redis 的高可用性解决方案。它监视一系列Master-Slave集群(和其他Sentinel)。当某个Master下线时,自动将该Master下的某个Slave升级为Master。

Sentinel的代码阅读难度相对较大,这是因为它是时钟驱动的一个状态机,所以在逻辑上有点不是很连贯。
本文使用的版本和Redis底层对象实现原理分析这篇文章是相同的。有一些基础知识也在这篇文章中列出。

阅读全文 »

ELF文件链接和装载

发表于 2020-09-17

本篇将主要结合CSAPP介绍ELF文件的格式,常用的分析工具如objdump和readelf,以及Linux程序链接和装载的流程。

阅读全文 »

Spark ML库简析

发表于 2020-05-15

讨论Spark上分布式机器学习库的实现。
Spark的机器学习库主要分为ml和mllib,其中ml较新,本文主要围绕ml来讲。
ml和mllib底层会用到Breeze库(类似于numpy的线性代数库)和BLAS(Basic Linear Algebra Subroutines,更基础的线性代数库),在这里也进行介绍。

阅读全文 »
1…101112…26
Calvin Neo

Calvin Neo

258 日志
153 标签
RSS
GitHub Twitter Weibo
Links
  • xqq
  • wenwen
  • zyyyyy
© 2015 - 2025 Calvin Neo   Hosted by Coding Pages
版权声明
由 Hexo 强力驱动
主题 - NexT.Muse