Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/338.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 创建IRC消息队列_Java_Multithreading_Message Queue_Irc - Fatal编程技术网

Java 创建IRC消息队列

Java 创建IRC消息队列,java,multithreading,message-queue,irc,Java,Multithreading,Message Queue,Irc,我需要一种方法来限制我的IRC机器人上的消息数量,以避免twitch对聊天泛滥的全球禁令。(它们允许每30秒发送100条消息) 我考虑过两种方法,都涉及到消息队列 每条消息启动一个线程,该线程使用计数信号量。然后该线程阻塞30秒,然后释放。这将是一个非常干净的解决方案,因为队列将完全由操作系统管理,这意味着我的工作量会减少,但是,它可能会导致创建数百个线程。这些线程将在其生命周期的大部分时间处于休眠状态,但我不确定是否可以有效地启动数百个什么都不做的线程。它们在睡眠时不会占用调度程序中的时间片,

我需要一种方法来限制我的IRC机器人上的消息数量,以避免twitch对聊天泛滥的全球禁令。(它们允许每30秒发送100条消息)

我考虑过两种方法,都涉及到消息队列

  • 每条消息启动一个线程,该线程使用计数信号量。然后该线程阻塞30秒,然后释放。这将是一个非常干净的解决方案,因为队列将完全由操作系统管理,这意味着我的工作量会减少,但是,它可能会导致创建数百个线程。这些线程将在其生命周期的大部分时间处于休眠状态,但我不确定是否可以有效地启动数百个什么都不做的线程。它们在睡眠时不会占用调度程序中的时间片,但会消耗大量内存,并且在创建它们时会有大量开销


  • 存储一堆时间戳,如果时间戳的时间大于30秒,则在每次需要发送消息时将其删除。运行一个线程,每隔(10-50ms)检查一次堆栈底部,查看时间戳是否大于30秒,如果大于30秒,则将其删除,然后从队列中最高位置发送尚未发送的消息(如果存在)。当一条消息要发送时,如果有消息,它会立即发送消息。创建一个消息列表,每个条目都有日期


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

    这就是我在“2”中尝试的操作。在这种情况下我会同意。是的,我认为这是最好的实现。