hash算法选择

  • 1 rotatehash 算法
  • 2 add hash算法
  • 3 选择hash
  • 结果

1 rotatehash 算法

static int hash_rotate(const char *key, int prime){int hash, i;int len = strlen(key);for (hash = len, i = 0; i < len; i++){hash = (hash<<4>>28)^key[i];return (hash % prime);}}

2 add hash算法

 //加法hash,需要平均分配到各个线程中static int hash_add(const char* key, int prime){int hash, i;int len = strlen(key);for (hash = len, i = 0; i < len; i++)hash += key[i];return (hash % prime);}

3 选择hash

int _tmain(int argc, _TCHAR* argv[])
{const char * url = "xn/live/234";const char * url2 = "xn1/live/2345";const char * url3 = "xn2/live/234";const char * url4 = "xn/abc/23411";const char * url5 = "xn/abcd/234";const char * url6 = "xn/abcd/2345";const char * url7 = "xn/abcd/2346";const char * url8 = "xn/abcd/2347";const char * url9 = "xn/abcd/2348";const char * url10 = "xn/abcd/2349";const char * url11 = "xn2/abcd/2349";cout << hash2(url, 7) <<endl;cout << hash2(url2, 7)<<endl;cout << hash2(url3, 7)<<endl;cout << hash2(url4, 7)<<endl;cout << hash2(url5, 7)<<endl;cout << hash2(url6, 7)<<endl;cout << hash2(url7, 7) << endl;cout << hash2(url8, 7) << endl;cout << hash2(url9, 7) << endl;cout << hash2(url10, 7) << endl;cout << hash2(url11, 7) << endl;
}

加法hash 结果输出:比较平均分配到素数里面,我们用素数个线程启动任务,把不同的url任务分配到不同的工作者线程中
加法hash效果比较好,计算简单,当然你可以做更多的测试。
3
2
5
6
0
5
6
0
1
2
4

结果

websocket请求中,我们把不同的路由分配线程池中,简单计算到不同的线程里面,而不用记录哪个url路由在哪个线程中
如果记录,如下:

   map<string,int> _recordurl;也可以做到,用空间来代替选择,可以做到直接的平均分配,也是可以的。

线程池选择使用的hash算法相关推荐

  1. Hbase Compaction 源码分析 - CompactSplitThread 线程池选择

    目录 CompactSplitThread requestCompactionInternal方法 selectCompaction方法 requestCompaction方法 其他相关文章 Hbas ...

  2. Java线程池实现原理及其在美团业务中的实践

    来自:美团技术团队 随着计算机行业的飞速发展,摩尔定律逐渐失效,多核CPU成为主流.使用多线程并行计算逐渐成为开发人员提升服务器性能的基本武器.J.U.C提供的线程池ThreadPoolExecuto ...

  3. 线程池在美团的最佳实践

    随着计算机行业的飞速发展,摩尔定律逐渐失效,多核CPU成为主流.使用多线程并行计算逐渐成为开发人员提升服务器性能的基本武器.J.U.C提供的线程池:ThreadPoolExecutor类,帮助开发人员 ...

  4. 一文搞懂线程池原理——Executor框架详解

    文章目录 1 使用线程池的好处 2 Executor 框架 2.1 Executor 框架结构 2.2 Executor 框架使用示意图 2.3 Executor 框架成员 2.3.1 Executo ...

  5. 【有料】Java线程池实现原理及其在美团业务中的实践

    随着计算机行业的飞速发展,摩尔定律逐渐失效,多核CPU成为主流.使用多线程并行计算逐渐成为开发人员提升服务器性能的基本武器.J.U.C提供的线程池:ThreadPoolExecutor类,帮助开发人员 ...

  6. Java线程池实现原理及其在美团业务中的实践(转载加总结)

    我们知道线程有5种状态分别是新建,就绪,运行,阻塞,死亡,而对应的线程池也有5种状态RUNNING运行,线程池创建就是该状态,SHUTDOWN 不接受新任务,但是处理已存在的任务,STOP不接受新任务 ...

  7. 每日一博 - Review线程池

    文章目录 Pre 核心设计与实现 运行机制 线程池的生命周期 ctl 解读 ctl的相关方法 线程池的状态 任务执行机制 任务调度 任务缓冲 任务申请 任务拒绝 Worker线程管理 Worker线程 ...

  8. hash的算法 java_【数据结构与算法】一致性Hash算法及Java实践

    追求极致才能突破极限 一.案例背景 1.1 系统简介 首先看一下系统架构,方便解释: 页面给用户展示的功能就是,可以查看任何一台机器的某些属性(以下简称系统信息). 消息流程是,页面发起请求查看指定机 ...

  9. 面试官系统精讲Java源码及大厂真题 - 39 经验总结:不同场景,如何使用线程池

    39 经验总结:不同场景,如何使用线程池 人的影响短暂而微弱,书的影响则广泛而深远. --普希金 引导语 ThreadPoolExecutor 初始化时,主要有如下几个参数: public Threa ...

最新文章

  1. solr 函数使用之map
  2. Java的正则表达式使用及案例
  3. python操作html5日期控件_python、js 时间日期模块time
  4. 武汉网络推广教大家如何编辑出更高质量的文章TDK?
  5. 个人博客(前端菜鸡)持续开发中,可前往 欢迎访问. www.amayaliu.cn
  6. 基于 Kubernetes 的 FaaS 平台开源实现——Kubeless 的应用实践
  7. 《精益软件度量——实践者的观察与思考》—第1章1.1节精益软件开发的度量体系...
  8. c语言中调整颜色的函数_C语言中的输入输出函数
  9. 基于mui框架读取nfc数据_基于NFC的数据采集软件系统的设计与实现
  10. qt 配置的相对路径写法
  11. Build 2016,你可能忽视的几个细节
  12. JavaScript(JS)常用正则表达式汇总
  13. Jetty实战之 安装 运行 部署
  14. python random模块
  15. PyTorch 1.7 发布:支持 CUDA 11、FFT 新 API、及 Windows 分布式训练
  16. 8.Linux/Unix 系统编程手册(上) -- 用户和组
  17. PostgreSQL导入sql文件的方法
  18. JavaScript 编程精解 中文第三版 四、数据结构:对象和数组
  19. 新概念英语精讲 钟平 pdf_新概念英语三()
  20. 王者服务器维护11月,王者荣耀11月22日版本更新维护 更新内容介绍

热门文章

  1. IIC 差异电平传输 和 IIC 地址
  2. 使用busybox制作iniramfs
  3. virtual box中安装Mac OS后设置分辨率
  4. list lt map gt java_利用Set 对Listlt;Maplt;String,Objectgt;gt; 中的map对象中某一个属性去重...
  5. 马斯克:大部分人没必要活那么长!活太久会让社会“陷入窒息”
  6. 360集团或将推出数字安全免费新品
  7. 马斯克确诊新冠后续:已从低烧、感冒症状中完全恢复
  8. 苹果公布iPhone 12屏幕更换价格,果然没让人失望!
  9. 一加Z配置细节曝光:处理器大变 为了更好的进入欧洲市场?
  10. “拖欠货款、裁员降薪”,这家生鲜电商平台无奈回应...