我有一个多线程应用程序编写和读取ConcurrentLinkedQueue,它在概念上用于支持列表/表中的条目.我最初为此使用了ConcurrentHashMap,效果很好.需要跟踪订单条目的新要求,因此可以在最早的第一个订单中删除它们,具体取决于某些条件.ConcurrentLinkedQueue似乎是一个不错的选择,功能上它运作良好.
可配置数量的条目保存在内存中,当达到限制时提供新条目时,将以最早的第一顺序搜索队列以查找可以删除的队列.系统不会删除某些条目并等待客户端交互.
似乎正在发生的事情是我在队列的前面有一个条目,比如100K条目之前.队列似乎具有有限数量的已配置条目(size()== 100),但在分析时,我发现内存中有~100K ConcurrentLinkedQueue $ Node对象.这似乎是设计上的,只是浏览了ConcurrentLinkedQueue的源代码,一个删除只是删除了对存储对象的引用,但留下链接列表进行迭代.
最后我的问题是:是否有一种"更好"的懒惰方式来处理这种性质的集合?我喜欢ConcurrentLinkedQueue的速度,我无法承受在这种情况下似乎可能出现的无界泄漏.如果没有,似乎我必须创建第二个结构来跟踪订单,并可能有相同的问题,加上同步问题.
我正在从MIB编写SNMP管理器和模拟SNMP代理(以测试管理器).我有一个类似于下面的表,管理员应该能够添加/删除行.使用RowStatus执行此操作的习惯方法是什么?RowStatus是第一个设置的吗?PDU中可以包含其他OID吗?
我最初的用例是启动时表是空的.所以,如果我发送这样的SET PDU:
createStuffEntry.1.1.1 = 1
createStuffEntry.2.1.1 = 1
createStuffEntry.3.1.1 = 99
createStuffEntry.4.1.1 = "Dustbunnies"
createStuffEntry.5.1.1 = 5
Run Code Online (Sandbox Code Playgroud)
这应该适用于下面的定义吗?如果省略cRowStatus会发生什么?
createStuffTable OBJECT-TYPE
SYNTAX SEQUENCE OF CreateStuffEntry
ACCESS not-accessible
STATUS mandatory
DESCRIPTION
"A table for creating stuff."
::= { parentGroup 1 }
createStuffEntry OBJECT-TYPE
SYNTAX CreateStuffEntry
ACCESS not-accessible
STATUS mandatory
DESCRIPTION
"An entry for building a stuff to create."
INDEX { cPlanID, cID }
::= { createStuffTable 1 }
CreateStuffEntry ::=
SEQUENCE {
cPlanID
INTEGER,
cID
INTEGER,
cTemplateID
INTEGER,
cStuffName
DisplayString,
cRowStatus …Run Code Online (Sandbox Code Playgroud) 我一直在努力完成"勇敢和真实的Clojure",我只花了一个小时盯着这个循环试图将它变成一个简化或其他"更漂亮"的循环.我正试图在循环中尝试击中目标数字并提前返回时被绊倒.这里的想法是随机生成一个数字(基于大小)并返回该数字的正文部分.从概念上讲,我正在考虑将列表分成两部分并返回"断点".我还可以设想在它上面进行映射并添加"大小索引"然后进行过滤.我觉得我错过了一些简单的东西(我一直在努力减少).
(defn hit
"Expects a sequence of maps which have a :name and :size"
[body-parts]
(let [body-part-size-sum (reduce + 0 (map :size body-parts))
target (inc (rand body-part-size-sum))]
(loop [[part & rest] body-parts
accumulated-size (:size part)]
(if (> accumulated-size target)
part
(recur rest (+ accumulated-size (:size part)))))))
Run Code Online (Sandbox Code Playgroud)