尊旭网
当前位置: 尊旭网 > 知识 >

disruptor

时间:2024-03-01 02:50:43 编辑:阿旭

...... 是什么意思?

1、出现在文章中为省略号。2、出现在聊天的时候,表示对方对你的话感到无语,或者对你无话可说,只能用一个......表示。1、作为省略号,在汉语中的基本形式是位于中线的六个小圆点(……),占两个字的位置;工具书和科技文献有时用三个小圆点,占一个字的位置。整段文章或诗行的省略,用12个小圆点表示,自成一行,占四个字的位置。省略号不拆开移行,六连点要排在同一行。2、出现在聊天里,也是现代人对于一些标点符号的其他运用,多为网络用语。

disruptor 线程安全吗

disruptor一个生产者和多个生产者的区别

一个生产者的时候用的是SingleProducerSequencer,多个的时候用的是MultiProducerSequencer.

SingleProducerSequencer直接用cursor去判断,应为只有一个生产者的cursor,所以是没问题的.
public boolean isAvailable(long sequence)
{
return sequence <= cursor.get();
}

但是MultiProducerSequencer时候,每一个生产者都有cursor,disruptor采取的做法是用一个数组来存.
而且这个数组的大小和RingBuffer的大小是一样的.因为数组的一个位置只会由一个生产者获取,而且一个位置只能被某一圈的时候获取.
(获取一个位置两次,表示一个生产者从后面追上另外一个生产者,这个是不允许的.)

这里说说他们next方法的不同:
SingleProducerSequencer,完全不同sequence来表示位置,而是用了Padding类,缓存同样也用的是Padding类
private static class Padding
{
public long nextValue = Sequence.INITIAL_VALUE, cachedValue = Sequence.INITIAL_VALUE, p2, p3, p4, p5, p6, p7;
}

可以看到Padding的p2到p7是没用的,只是为了凑够64字节.因为cpu的缓存是64字节.这样做是为了避免缓存失效.Sequence类也做了同样的事情
可以看到Padding不是线程安全的,但是对于SingleProducerSequencer来说,只有一个生产者,足够了.

MultiProducerSequencer的next方法用cursor(Sequence类)来表示位置信息.用gatingSequenceCache(Sequence类)来缓存位置信息,这是为什么呢.
来看看Sequence类吧
public long get()
{
return UNSAFE.getLongVolatile(paddedValue, VALUE_OFFSET);
}

public void set(final long value)
{
UNSAFE.putOrderedLong(paddedValue, VALUE_OFFSET, value);
}

可以看到Sequence类是线程安全的,在MultiProducerSequencer 多个生产者的情况下必须要保障线程安全的.

但是说了这么多,感觉disruptor不可能会出现多个生产者.为什么呢.
在RingBuffer的构造函数中只能传入一个Sequencer对象,一个对象怎么多个生产者.
而且Sequencer不是线程类,完全没办法多线程.


如何优雅地使用Disruptor

装逼不可取,还不如多看点书,推荐kindle去看书提升自我。
kindle特别适合看小说 看英文版本的书籍,体验超级给力 ,对眼睛的伤害可以说很低,看久了也不疲劳, 待机也不错 手感也很棒,个人推荐KPW3,日版才600多,问日版国内能不能用,回答是肯定的。亚马逊资源也是很丰富的,但是kindle对PDF的书籍支持的很不好。
kindle原系统支持azw、pdf、mobi、prc、txt格式。其中mobi、azw和prc格式支持最为优秀。 PDF如果是扫描版的,因为不是为6寸量身定做的,所以,显示会不太清晰,或者由于本身扫描效果就不太好,所以会不太清晰。如果是字太小,原系统可以考虑局部放大,多看系统下可以用智能切边功能。 txt格式支持不是太好,有可能会出现乱码或者翻页有问题。把txt格式编码另存为UTF-8的编码的效果会好点(在电脑中打开一个txt文件,点击文件→另存为→编码选择UTF-8→保存),但是建议最好是转换成mobi。


LMAX的Disruptor如何工作?(stackoverflow的回答)

它可以用来替代队列,同时有很多SEDA和Actors模式的特性。和队列比较:Disruptor可以向其他线程发送消息,并在需要的时候唤醒其他线程(和BlockingQueue相似)。不过,他们之间有三个主要的区别。2. 把消息放入Disruptor需要2个步骤,首先在ring buffer中声名一个接口,这个接口提供使用者一个可以存放正确数据的Entry。然后必须提交这个entry,要想像上文提到的那样灵活使用内存,这两个步骤是必需的。提交操作使得消费者线程可以读取消息。3. ring buffer中被消费的消息应该由消费者来追踪。不让ring buffer来追踪消息可以减少写冲突的出现,因为每个线程都自己维护计数器。与Actors比较Actor模型是最接近Disruptor的程序模型,尤其是使用BatchConsumer/BatchHandler类。这些类隐藏了所有保持已消费的序列号的复杂实现的并且在重要事情发生的时候会提供一些简单的回调方法。不过有两个小小的区别。1. Disruptor使用一个线程对应一个消费者的模型,而Actors使用多对多的模型,比如你可以拥有尽可能多的actor,它们会分布在一定数量的线程上(一般一个核心一个actor)。2. BatchHandler接口提供了一个额外的(而且是很重要的)回调方法onEndOfBatch().它允许耗时操作,比如将I/O操作放到批处理中一起执行以提高吞吐量。使用其他Actor框架也可以作批处理,但是它们几乎都没有提供批处理执行结束的回调方法,你只能使用超时来判断批处理是否结束,从而导致差的延时。和SEDA比较LMAX设计Disruptor模式是为了替代SEDA。1. 和SEDA相比,disruptor主要的改进就是可以并行工作。Disruptor支持组播消息来实现这个功能,相同的消息(以一致的顺序)被发送给多个消费者。这样可以避免在管道中交叉层。2. 消费者可以依赖其他消费者的处理结果,通过把一个队列化的层放在它们之间。一个消费者可以简单地看到自己所依赖的消费者的序列号。这样可以避免在管道中合并层。和内存障比较可以把dispruptor理解为一个结构化的,有序的内存障。其中生产者障碍相当于写障碍,消费者障相当于读障碍。 第二个回答(answered Jul 16 '11 at 5:48 irreputable):首先我们来理解一下它提供的编程模型。它有一个或多个作者和读者。有一排从旧到新的条目(从左到右)。作者可以在右侧新增条目。每个读者按从左到右的顺序读取条目。读者显然不能跳过作者先读取。条目不能被删除。我用“读者”代替“消费者”来避免让人以为条目会被消费掉。不过我们知道最后一个读者左边的条目是没有用处的。通常读者可以并发地独立地读取条目。但是我们可以声明读者之间的依赖关系。读者间可以有任意非环形依赖。如果读者B依赖于读者A,读者B不能跳过读者A先读取。读者A可以注解一个条目,而读者B依赖于这个注解,所以就有了读者间的依赖。例如,A在一个条目上做一些计算,然后将结果保存到条目中的a字段。然后A前进,之后B可以读取这个条目和条目中的a。如果读者C没有依赖于A,那么C就不应该读取a。当然了,LMAX的主要目标就是性能。Disruptor使用一个预分配的条目环。这个环足够大,但是有上限,从而不会超出容量。如果环满了,作者会一直等待,直到最慢的作者前进而腾出空间。条目对象是预分配的并且会一直存在,以减少GC的消耗。我们不会增加新的条目对象或是删除旧的,相反的,作者会请求一个已存在的条目,填充它的字段,然后通知读者。这两个步骤真的是很简单的原子操作。setNewEntry(EntryPopulator);interface EntryPopulator{ void populate(Entry existingEntry); }预分配的条目相当于adjacent memory cells中的adjacent entries分配(很像),并且因为读者是顺序读取条目,所以利用CPU缓存很重要。还有做了很多努力来避免锁,CAS,甚至是内存障(比如如果只有一个作者的话就使用不变的序列变量)。写给开发者:不同注解的读者应该写到条目中不同的字段,从而避免写冲突。(事实上他们应该写在不同的缓存行中。


DOTA所有英雄的英文简称是什么?

A:AM——敌法师AXE——斧王B: BANE——痛苦之源 BB——刚背兽 BH——赏金猎人 BM——兽王 BONE——骷髅弓箭手 BR——育母蜘蛛 BS——血魔 C:CHEN——圣骑士CM——水晶室女CK——混沌骑士CW——半人马酋长 也叫CENTD:DIRGE——不朽尸王DK——龙骑士DP——死亡先知DR——黑暗游侠DS——黑暗贤者E:EH——魅惑魔女Enig——谜团ES——撼地神牛F:FUR——先知FV——虚空假面G:GA——炼金术士GC——发条Goblin——哥布林工程师H:Hus——神灵武士I:无J:JUGG——剑圣K:KAEL——召唤师KOTL——光之守卫KUNKKA——船长L:LD——德鲁伊LICH——巫妖LINA——秀逗魔导士LION——恶魔巫师LOA——地狱领主Lucifer——末日守卫LUNA——月之骑士LYC——狼人M:MAG——半人猛犸MEDUSA——蛇发女妖MEEPO——地卜师MOR——变体精灵N:N'aix——食尸鬼NA——地穴刺客NAGA——娜迦海妖NEC——死灵法师NS——暗夜魔王NW——地穴编织者O:OD——黑耀毁灭者OK——全能骑士OM——食人魔魔法师P:PA——幻影刺客PANDA——熊猫酒仙PL——幻影长矛手PL——深渊领主POM——月之女祭司PUCK——精灵龙PUDGE——屠夫PUGNA——遗忘法师Q:QOP——痛苦女王R:RAZOR——闪电幽魂S:SA——隐形刺客SB——裂魂人SF——影魔SG——鱼人守卫SIL——沉默术士SK——沙王Sniper——矮人火枪手SNK——骷髅王SP——暗影牧师SPE——幽鬼SS——暗影萨满STORM——风暴之灵SVEN——流浪剑客T:TA——圣堂刺客TB——灵魂守卫TC——牛头人酋长(6.60应该会出来吧)TH——潮汐猎人THD——双头龙TINY——山岭巨人TK——地精修补匠TS——受折磨的灵魂TW——巨魔战将U:UW——熊战士V:VENO——剧毒术士VIP——冥界亚龙VIS——死灵飞龙VS——复仇之魂W:WD——巫医WL——术士WR——风行者X:无Y:无Z:ZEUS——众神之王DOTA简介:《DotA》(Defense of the Ancients),可以译作守护古树、守护遗迹、远古遗迹守卫, 是由暴雪公司出品即时战略游戏《魔兽争霸3》的一款多人即时对战、自定义地图,可支持10个人同时连线游戏,是暴雪公司官方认可的魔兽争霸的RPG地图。最早的DOTA地图则在混乱之治时代就出现了,一位叫做Euls的玩家制作了第一张DOTA地图《RoC DOTA》,其中两队都只有总共5个英雄,非常简单。Euls退出之后有位玩家整合了很多个英雄制作了DotA Allstars。在2005年,6.01版发布不久,IceFrog同Neichus对地图进行了多次修正和更新。之后Neichus退出,IceFrog成为主要的地图程序员,负责包括游戏的执行和平衡的测试在内的任何工作。随着6系列版本不断被发布,bug的修正,新的英雄和新增加的法术不断被引入《DotA》。最终游戏分为两个阵营,玩家需要操作英雄,通过摧毁对方遗迹建筑来获取最终胜利。这种多人在线竞技模式后来被称为"Dota类游戏",为之后的多个竞技类游戏产生了深远的影响。

DOTA2的专业术语都有哪些?

 1号位
  ——主Carry,大哥级人物,通常都是后期,负责打到后期挑大梁的人
  2号位
  ——副C,因为成长、技能等原因拖到后期也不虚的这类英雄,中期有能力带动Gank节奏,带领小弟们跟对方掐架,从而达到保主C的目的。
  3号位
  ——主Gank,一般情况下走中带动节奏,当然也有劣势路单的时候,这类英雄在线上一般比较强势,劣势路单也不会轻易被杀死,如巫妖,蝙蝠,风行等。
  4号位
  ——4号位一般是副gank,多是团控英雄, 一般神牛/抄袭/谜团/蓝胖等都可以打4号位。4号位的英雄基本前期会放弃等级,在线上会配合5号位的人进行多线游走。或者保护主C
  5号位
  ——5号位是纯辅助,负责鸡鸟眼,后期几乎无作战能力。常见的有VS/冰女等。
  2(或者2B)
  ——通常为指责别人脑子有病的话。
  3
  ——闪的意思。
  99
  ——向队友发出救援的意思。
  +++
  ——如果你有加血或者加蓝的技能就是让你给队友加一个的意思
  A
  ——摁A来强制攻击对方目标单位。
  afk
  ——away from keyboard,指玩家不在电脑前。
  aoe
  ——area of effect,范围性效果,指有范围效果的伤害技能和控制技能。
  BB
  ——乱嚷嚷的意思。另外也是刚背的别称。
  b
  ——back,回来的意思。
  bd
  ——backdoor,跳过小兵直接拆建筑的行为,也就是偷塔。
  bg
  ——bad game,为good game的反向使用,在即使是烂game也礼貌性地以gg结尾的今天,bg实不多见。
  bs
  ——最常用的自然是鄙视的意思。
  buff
  ——指提升某个英雄或者某个技能
  ——也指被技能施加的某种状态
  Combo
  ——2个以上英雄一起配合释放一系列技能杀伤对方的战术。
  CM
  ——Clan Match,一种比赛的模式,通过队长ban,pick来选择英雄对战,正规比赛都用这种模式。
  CW
  ——Clan War,同上
  deny
  ——就是杀死己方的小兵,不让对方拿经验和钱的战术,俗称反补
  dmg
  ——damage,伤害
  dmg dealer
  ——专做物理伤害输出的英雄
  DPS
  ——damage per second,每秒伤害,现在多做名词,“提供输出的英雄”一般都指的是主力Carry
  farm
  ——打小兵赚钱的意思,也有farm hero一说,靠杀英雄赚钱,但是没有farm roshan...
  G
  ——路人局中为了防止秒退开局前往往先打GGG?意思是准备好了么?要开始了,好让秒退的人赶紧退出。
  GG
  ——Good Game,两强交手不打不相识,最后相见恨晚谓之GG。现今在BattleNet所有对抗性游戏的最后都会以GG作为礼节性结束语。当然也有投子认输之意。
  GL
  ——good luck,好运的意思,通常在开始的时候表示友好的意思。
  gank
  ——用来指在游戏中两个以上的英雄同时行动,对对方的英雄进行偷袭、包抄、围杀。在游戏中一般都是走中路的负责gank来带动节奏。
  IAS
  ——increase attack speed,指攻击速度加成。
  Imba
  ——imbalance,指不平衡,可以是过分弱小,也可以是过于强大。
  jump
  ——2v1情况下,人多一方1人绕到敌人后面夹击的行为。
  ks
  ——Kill Steal,抢kill,在游戏中泛指抢人头,就是敌方英雄的最后一下伤害来自于你的伤害,一般被说KS的都是故意的,敌方英雄黑血Lion扔个大,这种是比较可耻的KS。
  lol
  ——laugh on loudly,大声笑
  MS
  ——情况紧急,赶紧过来!
  mh
  ——map hack,一种第三方的作弊程序,能够看黑幕以外的东西。俗称开图
  miss
  ——某人在地图上消失的意思,让队友提高警惕。
  newbie
  ——新手,菜鸟
  noob
  ——newbie,比菜鸟狠一点的说法。
  nuke
  ——即时减少对方一定hp的技能
  nice
  ——好。和good是一个意思,通常是夸队友玩的好的意思。
  OMG
  ——oh my god,天啊 还有是DOTA中的一种游戏模式,英雄可以随意搭配其他英雄的技能,不过依旧只能选择4个技能,而且只能有一个大招!
  PL
  ——漂亮。在dota中一般是指队友1V5,极限反杀,某些技能使用精准或绝妙。
  powerup
  ——河道中的符咒的别称
  push
  ——以摧毁对方塔、兵营等目标进行的冲锋性质的攻击。
  Rax
  ——指Barracks,兵营。
  rune
  ——指河道中符咒,很有可能成为胜负关键的东西
  Solo
  ——一个人打一条路的意思。5个队员分配3条路,总要有人solo的。因为Solo升级快,所以通常意味更多的责任。也有为了压制或者快速打钱的solo。还有恩怨的意思,比如游戏中两个人产生不愉快或谩骂,通常会以SOLO来解决,1V1中路对打,先死3次或者掉两个塔的一方算输,俗称3血2塔。
  stun
  ——泛指带有眩晕效果的技能。
  slow
  ——泛指带有缓慢效果的技能。
  T
  ——用IP外挂直接踢的做法叫做T。还有进房间时黑店要位置会让你T掉不是他们人的玩家
  TK
  ——team kill,指故意害自己队友的行为。也指英雄地精修补匠
  Tank
  ——用来为队友抵挡伤害的英雄,也称为"肉"。
  ult
  ——ultimate,英雄需要6级才能习得的技能, 简称"大"。
  ——用IP外挂直接踢的做法叫做T。还有进房间时黑店要位置会让你T掉不是他们人的玩家
  TK
  ——team kill,指故意害自己队友的行为。也指英雄地精修补匠
  Tank
  ——用来为队友抵挡伤害的英雄,也称为"肉"。
  ult
  ——ultimate,英雄需要6级才能习得的技能, 简称"大"。