`
Poechant
  • 浏览: 229520 次
博客专栏
Bebe66e7-3a30-3fc9-aeea-cfa3b474b591
Nginx高性能Web服务...
浏览量:24321
5738817b-23a1-3a32-86de-632d7da73b1e
Cumulus实时媒体服务...
浏览量:22104
社区版块
存档分类
最新评论

Nginx源码完全注释(6)core/murmurhash

 
阅读更多

Nginx源码完全注释(6)murmurhash

  • 作者:柳大·Poechant(钟超)
  • 邮箱:zhongchao.ustc#gmail.com(# -> @)
  • 博客:Blog.CSDN.net/Poechant
  • 日期:August 18th, 2012

MurmurHash2 was written by Austin Appleby, and is placed in the public domain. The author hereby disclaims copyright to this source code.

下面是摘自 Google Code 的 Murmurhash 开源项目主页上的 Murmurhash2,Nginx 就是采用的这个。


uint32_t MurmurHash2 ( const void * key, int len, uint32_t seed )
{
  // 'm' and 'r' are mixing constants generated offline.
  // They're not really 'magic', they just happen to work well.

  const uint32_t m = 0x5bd1e995;
  const int r = 24;

  // Initialize the hash to a 'random' value

  uint32_t h = seed ^ len;

  // Mix 4 bytes at a time into the hash

  const unsigned char * data = (const unsigned char *)key;

  while(len >= 4)
  {
    uint32_t k = *(uint32_t*)data;

    k *= m;
    k ^= k >> r;
    k *= m;

    h *= m;
    h ^= k;

    data += 4;
    len -= 4;
  }

  // Handle the last few bytes of the input array

  switch(len)
  {
  case 3: h ^= data[2] << 16;
  case 2: h ^= data[1] << 8;
  case 1: h ^= data[0];
      h *= m;
  };

  // Do a few final mixes of the hash to ensure the last few
  // bytes are well-incorporated.

  h ^= h >> 13;
  h *= m;
  h ^= h >> 15;

  return h;
} 

下面是 Nginx 中 Murmurhash 的源码,基本与上面无异。


uint32_t
ngx_murmur_hash2(u_char *data, size_t len)
{
    uint32_t  h, k;

    h = 0 ^ len;

    while (len >= 4) {
        k  = data[0];
        k |= data[1] << 8;
        k |= data[2] << 16;
        k |= data[3] << 24;

        k *= 0x5bd1e995;
        k ^= k >> 24;
        k *= 0x5bd1e995;

        h *= 0x5bd1e995;
        h ^= k;

        data += 4;
        len -= 4;
    }

    switch (len) {
    case 3:
        h ^= data[2] << 16;
    case 2:
        h ^= data[1] << 8;
    case 1:
        h ^= data[0];
        h *= 0x5bd1e995;
    }

    h ^= h >> 13;
    h *= 0x5bd1e995;
    h ^= h >> 15;

    return h;
}

Reference

  1. Murmurhash2

-

转载请注明来自柳大Poechant(钟超Michael)的CSDN博客:

钟超Michael的博客:Blog.CSDN.net/Poechant

钟超Michael的微博:钟超Michael的新浪微博

-

分享到:
评论

相关推荐

    nginx 源代码 注释版

    6. **负载均衡**:Nginx通过`src/http/modules/ngx_http_upstream_hash_module.c`、`ngx_http_upstream_round_robin_module.c`等模块实现负载均衡策略,如轮询、哈希等。 7. **缓存机制**:`src/...

    带有注释的nginx源码

    **标题:“带有注释的nginx源码”** **描述:“带有详细注释的nginx源码,能帮你有效地阅读和学习nginx源码”** 这是一份包含丰富注释的nginx源码,非常适合那些想要深入理解这款高性能HTTP和反向代理服务器工作...

    nginx源码分析--带注释

    在本文中,我们将深入探讨Nginx的源代码分析,主要关注那些被特别注释的部分,以帮助我们更好地理解和利用这个高性能的Web...因此,花时间研究和注释Nginx源码对于任何希望深入掌握Nginx的人来说都是极其有价值的投资。

    cpp-nginx192源码通读分析注释

    《C++与Nginx1.9.2源码深度解析》 在深入理解Web服务器的工作原理时,阅读和分析其源代码是一项重要的任务。...本文将聚焦于Nginx ...对于希望提升Web服务器开发技能的程序员来说,Nginx源码无疑是一本宝贵的教科书。

    nginx1.9.2源代码(内含大量注释的版本).zip

    **Nginx 1.9.2 源代码详解** Nginx 是一款高性能的 Web 服务器和反向代理服务器,以其轻量级、高并发处理能力而著名。1.9.2 版本是 Nginx 的一个重要里程碑,其中包含了丰富的功能和优化。下面我们将深入探讨 Nginx...

    reading-code-of-nginx-1.9.2_y123456yz.tar.gz

    三、源码注释与学习方法 该压缩包包含详尽的函数中文注释,这对于初学者来说是一份宝贵的资源。学习Nginx源码,首先需要熟悉C语言和网络编程基础,然后从主进程和工作进程的入口函数开始,逐步了解各个模块的功能和...

    理解 Nginx 源码

    首先,要理解Nginx源码,首先要了解Nginx的基本架构。Nginx采用多进程模型运行,其中包含一个master进程和多个worker进程。master进程的主要作用是管理worker进程,包括处理信号,新建、关闭worker进程,以及升级...

    nginx-1.3.14 源代码

    1. **获取源码**:首先,从 Nginx 官方网站或通过 Git 克隆下载源代码到本地。 2. **依赖检查**:确保系统已安装必要的依赖库,如 pcre (Perl Compatible Regular Expressions)、zlib (数据压缩库) 和 OpenSSL (SSL/...

    nginx-1.14.2:nginx1.14.2版本原始代码,供学习使用,随后会添加一些自己理解的注释

    学习Nginx源码,可以从以下几个方面入手: 1. **了解配置语法**:通过阅读`ngx_conf_file.c`,理解Nginx如何解析配置文件,以及配置项的结构和解析规则。 2. **研究事件模型**:深入`src/event/*`,了解不同平台下...

    nginx-1.10.2:nginx-1.10.2源码-自己初读过的版本,其中包含了一点英文注释

    **Nginx 1.10.2 源码分析** Nginx 是一个高性能的 HTTP 和反向代理服务器,广泛应用于互联网服务,以其高效、稳定和轻量级的特性受到开发者们的青睐。Nginx 1.10.2 是其在2017年发布的一个稳定版本,它在前一版本的...

    nginx-1.0.14_comment_jianfengye.tar.gz

    在这个名为 "nginx-1.0.14_comment_jianfengye.tar.gz" 的压缩包文件中,我们得到了 Nginx 1.0.14 版本的源码,并且附带了中文注释,这对于理解和学习 Nginx 内部工作原理来说,无疑是一份极其宝贵的资源。...

    安装Discuz X1.5网址后面带端口的解决方法

    X1.5可能没有完全考虑在非标准端口服务环境下的兼容性。理想情况下,软件开发者应充分测试各种部署环境以确保兼容性,从而避免用户在部署时遇到此类问题。希望官方能够在未来版本中修正这类问题,提供更完善的兼容性...

    red5集群cluster方案

    接着,打开`red5.xml`文件,取消对默认上下文bean的注释,以便正确启动origin服务器。 3. **edge服务器集群方案** - **配置调整**:同样地,在`red5-edge-core.xml`中,将`spring`替换为`beans`。关键一步是更新`...

    PyPI 官网下载 | django-master-0.2.0.tar.gz

    - `docs/`:文档相关的文件,可能包括源码注释和生成的HTML文档。 - `tests/`:单元测试和集成测试的代码,确保Django的正确性和稳定性。 - `setup.py`:Python的安装脚本,用于在本地环境中安装或升级Django。 - `...

Global site tag (gtag.js) - Google Analytics