微信8.0版本带来聊天新姿势
|
为了让大家的信息达成一致,启动的时候,每个人都得把自己负责的槽位信息告诉其他伙伴。 一共有一万多个槽,要通知其他小伙伴,需要传输的数据量还挺大的,后来我们仨又商量了一下,为了压缩数据空间,每个槽位干脆就用一个bit来表示,自己负责这一位就是1,否则就是0,总共也才16384个bit,也就是2048个字节,传输起来轻便快捷,一口气就发送过去了。 struct clusterNode { // ... unsigned char *slots[16384/8]; // ...}; 这样传输的数据是轻量了,但真正工作的时候还是不方便,遇到读写数据的时候,总不能挨个去看谁的那一位是1吧。
干脆一步到位,用空间换时间,我们又准备了一个超大的数组来存储每个槽由哪个节点来负责,通过上面的方式拿到信息后,就更新到这里来: 想要加入集群,得有一个介绍人才行。通过团队里的任何一个成员都行,就比如说我吧,只要告诉我IP和端口,我就给他发送一个MEET信息,发起握手,对方得回我一个PONG信息同意入伙,最后我再回他一个PING信息,三次握手就完成了! 然后,我再把这件事告诉团队中其他成员,新的伙伴就算正式成为我们的一份子了。 第二件很重要的事情就是要解决数据存储的公平问题,不能旱的旱死,涝的涝死,我们争论了很久,最后决定学习人家哈希表的方法。 我们总共划分了16384个哈希桶,我们把它叫做槽位Slot,程序员可以按照我们能力大小给我们各自分配一部分槽位,比如我们团队: 我:0-4000 大白:4001-9000 小黑:9001-16383 我比较菜,只分到了4000个,小黑老哥最辛苦,要负责7000+个槽位,正所谓能力越大,责任越大,谁叫他内存空间最大呢。
数据读写的时候,对键值做一下哈希计算,映射到哪个槽,就由谁负责。 xx.iml文件的作用 每个Module模块都对应一个同名的 .iml文件,用于描述该模块的相关信息。如:SDK、语言等级、依赖、源代码所在位置、输出路径等等。 总结 本文主题是介绍IDEA的Project和Module两个重要概念,然后再通过具体示例的方式加深理解,讲的还是比较清楚的(可能是全网最清楚的?),希望可以帮助到你加深对IDEA的理解,再也不要把IDEA的Project比作Eclipse的Workspace。 简单总结一下本文内容:
(编辑:平凉站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |

