模拟区块链算法记录

2021.9.21
数据结构初始完成,接下来要实现,分布式使用多线程来模拟。

关于pthread_create(),,有如下:

#include <pthread.h>
int pthread_create(
                 pthread_t *restrict tidp,   //新创建的线程ID指向的内存单元。
                 const pthread_attr_t *restrict attr,  //线程属性,默认为NULL
                 void *(*start_rtn)(void *), //新创建的线程从start_rtn函数的地址开始运行
                 void *restrict arg //默认为NULL。若上述函数需要参数,将参数放入结构中并将地址作为arg传入。
                  );

简化而言,就是第一个参数传一个内存单元,比如数组等。
第二个参数,默认传NULL就OK。
第三个参数,传你要去哪个函数,也就是它所说的从哪里开始执行。
第四个参数,传你要进入的函数的参数。

一个想法提出还是挺简单的,就是实现起来不那么容易。

2021.9.25
也只是刚刚解决了,编译的问题,剩下的问题就是逻辑上的了,不过感觉没有太过困难。
如何实现让同一grade值之间的节点互相结合选举?我的想法是用多个并行处理的机器,每个机器处理固定级别的一组节点。机器的数量,要保证并行的话,数量需要太多了。。但是不并行的话,很难看出算法的优势所在。

摇摆不定中。

2021.9.26.00.16
解决了几乎所有的问题,一天时间足够干的事情太多了。当然目前还没有做到最优化,最优化的时候,是有两级并行的。
第一级并行:不同grade值之间的并行
第二级并行:相同grade值之间的并行
第二级并行对于效率的提高没有那么大的改变。
所以我也不想过分追求计算机仿真的复现度那么完全。目前就这样先把第一级并行解决了就好。

不过,代码目前存在一个问题在于,老是报错,以及还有最后阶段的一个同步阶段代码,
没有写完。

2021.9.29
目前代码已经完成了。但是还有小bug,这个找bug的过程感觉还挺享受的。至少主体都写完了,当然还剩下最后的自上而下的树形共识过程。
之前的最好打算是1/3的共识容错,现在由于算法的问题,还是有遗漏的地方,所以,容错已经降低到1/4了。当然,最好情况下的,4的n次方的情况,还是能够1/3共识容错。先把代码调通顺再说。毕竟我还没到硕士阶段。我的主要目的还是绩点这个狗东西。
又碰见了莫名其妙的错误,这次我长记性了,我上来就看路径。果然就是路径问题。

2021.9.30
暂且记一下目前的问题。
你不能通过直接的结算就确定需要的最高级处理机的级别。每次都是不确定的,这就是这个问题的困难之处。
每次都是不确定的,那么就会出现难以预测的问题。

int num_total[N_degree];//某个级别最高能有几个节点

这是一个错误的尝试,那么我只能用忙式等待了。同时,退出条件将会变得复杂。而且将会浪费更多的资源。

2021.10.2
我觉得今天可以结束战斗。
先把代码保存一下。怕我以后找不到了。。。毕竟原始代码还是浓缩了大量的精华。

2021.10.3
接下来的工作就是把共识阶段完善好,又要多开几个线程了。说来,用什么互斥算法,还不如自己去根据逻辑改好。
大成功。

2021.10.4
把算法好好验证了一下,在20万个节点的时候运行时间还是0.2秒以下。这算是大成功,不过我没搞懂的是,为什么答案不唯一。这个好好研究一下还是得。
至于共识阶段,还是On的话,其实没什么必要去模拟了。

2021.12.10
忘记更新很久了,最后发现所有的错误都是冲突的错误,实际上就是一个串行,并发本质上就是一个串行,那么我们可以用这个去模拟通信复杂度,论文已经得到数据,并且投出去了,希望等待到好的结果吧。不过事情不会那么顺利,可能还要改,结论真的可信吗。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值