larbin的队列

以前整理过的关于larbin的队列结构给需要的网友:
 
     
为什么disk和priority的队列都是成对出现的,是因为可以认为每个site在namedSiteList当中都有一个小的队列来保存它的url,这个url的个数是有个限制的,当超过这个限制的时候就不能再把该site下的url放入,但也不能丢弃,而是放入wait队列。larbin会控制一段时间在disk队列中取url,一段时间在diskWait当中取url。disk和priority的区别只是优先级的区别。

namedSiteLIst的作用可以任务是实现了DNS缓存;IPSiteList是控制了polite访问。


larbin中用到的都是循环队列,根据存储方式不同,有存储在磁盘中的队列PersistentFifo,存储在内存中的队列SyncFifo,Fifo,ConstantSizedFifo 。

PersistentFifo:用于将优先级较低的urls存储在磁盘,文件名后六位是数字,随着urls的增加而递增,每个文件最多url数由type.h中的urlByFile指定,在从fifo中读出后如果输出文件已经读完,则会删除该文件,在reload时,如果只有一个文件,则会忽略,对于文件名后数字最大的文件作为输入文件(压入队列),最小的作为输出文件(弹出队列),在初始化时,文件名后数字最大的文件会被清空,这样保证url数是urlByFile的位数,可以容易的取得urls数

SyncFifo:只是在Fifo的基础上加了同步机制,用到pthread_mutex_lock(阻止两个线程同时对fifo访问)和pthread_cond_wait(fifo为空时等待)以及pthread_cond_broadcast(广播fifo中有数据),其实larbin只是单线程,无需同步,可以考虑扩展为多线程。


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值