- 1、本文档共8页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
基于贪心策略优化欺负算法
基于贪心策略优化欺负算法摘 要: 在分布式操作系统中,存在一个“协调者”的进程。当该进程发生停止工作后需要产生一个新的“协调者”,新的协调者的产生过程称之为选举过程,该过程的一个基本算法就是欺负算法,但是利用基本的欺负算法做选举过程时需要进行大量的消息传递,这就可能会导致系统整体性能降低。这里对基本欺负算法进行仔细分析,并在分析参考了其他的一些相关优化措施的基础上,我们提出了一种新的优化算法,它利用了贪心算法的策略对基本的欺负算法做了一定的优化,改善了系统的性能。
关键词: 分布式算法 选举算法 欺负算法 协调者 贪心算法
1.引言
随着网络软件技术和硬件条件的发展,分布式技术如分布式操作系统、分布式数据库技术等得以迅速发展,成为计算机科学与技术研究领域的一个热点和重点。该技术越来越被广泛应用,其中的算法问题也越来越受到重视。[1]
很多分布式算法需要有一个进程作为协调者、发起者或其他类似的角色。而如何选举出这个特定协调者的算法,我们形象地称之为选举算法。选举算法的目标是确保发起选举后,当所有的进程都同意选出的新协调者时选举结束。[2]本文主要是在研究基本欺负算法通信量大的缺陷后,对此问题上提出了一些优化措施,依靠减少通信量来达到系统的性能优化。
2.欺负算法及性能分析
2.1欺负算法
由Garcia-Molina(1982)提出,欺负算法总是找进程号最大的进程并把它指定为协调者,其基本思想是:当一个进程P发现协调者不再响应请求时,就判定协调者已经停止工作,于是它就发起选举,选出当前活动进程中进程号最大的充当新的协调者。[3]
前提:假设当前有N个进程在运行,首先充当协调者的进程号是N。
(1)进程P(假设该进程的进程号是i)发送消息给协调者时发现没有回应,则认定协调者已经停止工作,则进程P向其他进程号比它大的进程发送发起选举的消息。
(2)如果没有进程回应,则认为其他进程均已停止工作,当前进程P充当协调者。
(3)如果有其他进程响应,因为发送反馈消息的进程的进程号必定大于当前进程P,所以将选举权交给响应者,响应者发起一轮新的选举。
(4)响应者发起的选举也要按照往大进程号发的规则进行,一直到找到进程号最大且正常运行的进程为止。此时一共发送的消息数为(N-i)+(N-i-1)+…+1个,接收到的反馈消息为(N-i-1)+(N-i-2)+…+1个。
(5)最后新的协调者将它获胜的消息通知所有其他正常运行的进程。
2.2欺负算法举例
下面是欺负算法工作的例子,以6个进程为例,进程号分别为1到6号。开始时号码最大的6号为协调者,如图1(a)所示;但它突然停止工作,如果此时3号进程首先发现并发起选举,它向所有比它进程号大的进程4、5、6号发送选举消息,如图1(b)所示;进程4、5号接收消息后发回OK消息,如图1(c)所示;3号进程收到第一个反馈消息时就表示自己的任务已经完成,进程号大的进程已经接管该选举,此时4号进程发起选举,发送消息给5、6号,5号进程发起选举,发送消息给6号,如图1(d)所示;则5号反馈消息给4号,而6号因为已经发生停止工作,所以没有反馈消息给5号,如图1(e)所示;从而5号进程成为新的协调者,并将该结果通知其他所有进程,如图1(f)所示。到此为止,选举过程结束,系统恢复正常运行。
2.3欺负算法分析
这样我们可以得出总共的消息数(包括发送的和接收的)Message=[(N-i)+(N-i-1)+…+1]+[(N-i-1)+(N-i-2)+…+1]=N-2iN+i。那它的算法复杂度为O(n)。
显然,消息的数量和两个问题有关,一个是第一个发现协调者停止工作的进程号,一个是总的进程数。第一个发现协调者停止工作的进程号越小,则选举所要发送的消息数越多,总的进程数越大,所要发送的消息数也越多,而且前一个仅仅是一次函数关系,而后者是二次函数关系。所以我们需要对该算法进行一定的优化来减少消息数量的传递,以减轻网络的负载问题和避免发生广播风暴[4]问题。
3.算法优化
3.1优化思路
在前面第二部分中的选举算法说明中,已经提到我们假设每个进程都知道所有其他进程的进程号,这就表示每个进程中必定存在一张进程号列表,但没有记录运行状态。下面我们利用这一特点,并利用贪心算法的原则:通过做一系列的选择来给出某一问题的最优解,对算法中的每个决策点,做一个当时(看起来)最佳的选择,虽然这种策略并不是总能产生出最优解,[5][6]来对基本欺负算法做一定的优化。
3.2优化后的算法过程
其基本思想是:
前提:假设运行的进程数为N,当前的协调者的进程号是最大值N。
(1)当一个进程P(假设该进
文档评论(0)