首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >创建IRC消息队列

创建IRC消息队列
EN

Stack Overflow用户
提问于 2015-01-08 22:11:16
回答 1查看 202关注 0票数 0

我需要一种方法来限制信息计数在我的IRC机器人,以避免全球禁止从抽搐聊天洪流。(它们允许100条消息/30秒)

我考虑了两种方法,这两种方法都涉及消息队列。

  1. 每条消息启动一个线程,该线程接受一个计数信号量。然后这个线程阻塞30秒,然后释放。这将是一个非常干净的解决方案,因为队列将完全由OS管理--这意味着对我来说工作量更少,然而,它可能会导致创建数百个线程。这些线程将在其生命周期中大部分时间处于休眠状态,但我不确定是否可以有效地启动数百个不做任何事情的线程。当他们睡着时,他们不会占用调度程序的时间片段,但是他们会消耗大量的内存,并且在创建这些内存时会产生大量的开销。
  2. 存储一堆时间戳,如果时间戳超过30秒,每次需要发送消息时,将其删除。让线程运行,每隔一次(10-50ms)检查堆栈底部,以查看时间戳是否超过30秒,如果是,则删除,然后从队列中没有发送的最高位置发送消息(如果存在的话)。当消息传入要发送时,如果队列中有<#消息,它会立即发送消息。

1的缺点是创建了许多什么都不做的线程。

2的缺点是需要一个线程不断轮询消息列表。

2可以改进,以计算等待堆栈中的底部消息已存在30秒并发送消息所需的时间,但我觉得在那个阶段我似乎使问题变得过于复杂。

对于哪种方法更好,有什么想法吗?

EN

回答 1

Stack Overflow用户

发布于 2015-01-08 22:14:00

创建一个sentMessage列表,其中包含每个条目的日期。

在发布新消息之前检查列表。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27850446

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档