首页
精选文章归并排序查看全文归并排序也是也是基于分治思想是想的算法。归并排序分为两个步骤,首先是对数据进行分区,将数据分为两个部分,两部分分别进行排序,之后再将两个已经排好序的数据集进行合并,归并排序的命名也由此而来。分治之后的数据如何排序呢,依然是递归的采用归并排序的方式,直到数据集的规模变为1。 归并排序分为两个部分 拆分 归并排序的拆分是典型的递归思想,如果排序的数据集多于1个元素,则将数据集分为两个部分,之后将两个部分递归的进行该操作。 归并 归并是将两个有序的集合合并的过程。 合并的过程如下: 两个集合分别声明初始指针指向集合的头部,比较指针指向的值,较小的值放入结果数组,同时较小值集合的指针往前移动一位,当一个集合提前遍历结束之后,另外一个集合剩余的元素直接放入结果数组的尾部。 C++代码如下:Channel【Golang】查看全文“不要通过共享内存来通信,通过通信来共享内存”,——rob pike对于程序而言,不同线程/进程之间的数据共享模式大致可以分为两类 通过共享内存的方式实现,本质上就是多线程模式,大多数面向过程或者面向对象的语言一般都采用该方式,共享内存即不同线程访问同一个变量,每个线程可以看到其他线程对变量的变更,共享内存方式存在以下缺点: 变量的更新操作需要同步机制,在性能方面,实现复杂度方面较高。 变量的更新需要对其他线程立即可见,需要额外的保障机制。 变量变更的追踪机制复杂,业务逻辑较为复杂。 通过通信来共享数据,通用的模式有Actor和CSP两种模式,Actor模型中,主角是Actor,Actor一般是协程机制的worker,Actor彼此之间直接发送消息,不需要经过间介质,消息是异步发送和处理的,CSP机制的worker没有Actor自带的信箱机制,需要通过管道(Channel)通信,通过channel,CSP机制的worker之间耦合性更低。 Channel的通信模式,数据通过消息进行交互,数据发送之后不再和其他线程共享,不需要复杂的同步机制。 Channel天然实现了异步通信机制,性能更高。 Golang语言中的Channel是协程(Goroutine)之间通信的管道,用于协程之间通讯和同步。 Channel用于交换Goroutine之间的数据,缓冲模式的Channel是异步模式的,所以需要有数据的存储组件,该存储组件是采用环形队列实现的。 对Channel的写操作可能因为存储空间已满的原因发生阻塞,同理读操作可能会因为数据为空而发生阻塞,需要保存这些阻塞的Goroutine,Channel使用双向链表分别保存读写发生阻塞的Goroutine…Percolator查看全文Percolator算法是Google发明的一种分布式事务处理算法,用于在大规模数据存储系统中实现实时更新和查询,具有高可用性和高性能的特点。Percolator算法的核心思想是将大规模数据集合拆分成多个子集,每个子集被存储在不同的节点上,每个节点只负责处理自己所拥有的数据子集,然后使用两阶段提交协议来保证所有节点的数据一致性。具体来说,Percolator算法分为两个阶段: 1.写阶段(Write Phase):客户端向Percolator系统提交一个事务请求,系统先在一个全局性的写缓存(Write Buffer)中记录该请求,然后将该请求转发到对应的数据分片节点上去处理。 2.提交阶段(Commit Phase):在所有分片节点上处理完毕之后,将写缓存中记录的所有写操作和其它数据变更操作通过Gossip协议(一种点对点信息交换协议)进行广播,以通知其它节点更新自己的本地数据副本。每个节点根据全局的日志来进行操作,并通过Paxos算法(一种分布式一致性算法)来保证数据一致性。如果所有节点都执行成功,则事务提交成功,否则回滚操作。 Percolator算法的优点在于其高效的事务处理方式和高可用性。相比传统的分布式事务处理方式,Percolator算法将大事务拆分成小事务进行处理,可以避免数据争用和死锁等问题,同时也具有高扩展性和高可用性的特点。 Percolator算法目前已经应用于Google的多个大型数据存储系统中,例如Google搜索、Google+、Google AdWords等。 Percolator的实现使用了Bigtable和Timestamp Oracle。其中Bigtable主要用于数据以及事务信息的存储… |
热门分类开源Golang消息队列JavaJavascriptLinuxMysqlNLPPHP事务内存管理分布式理论分类存储常用存储开源软件操作系统画图网络编程数据库算法虚拟化前端存储理论常用算法微服务数据结构算法应用计算机原理中间件共识算法分布式分治动态规划容器并发排序架构组件绘图工具网络协议编程语言理论算法思想树缓存架构C++字符串算法工程思想搜索
算法题库精选内容 |