当前位置: 首页 > 面试题库 >

控制ExecutorService每秒最多执行N个任务

秦滨海
2023-03-14
问题内容

如何控制/限制提交给的任务ExecutorService?我已经SMSTask发送了SMS消息,并且我需要控制执行程序,以便它最多只能以每秒N条消息的速度发送。


问题答案:

假设您为每个任务创建一条SMS消息,则可以使用ScheduleExecutorService。

final Queue<Task> tasks = new ConcurrentLinkedQueue<Task>();
int ratePerSecond = 10;
final ExecutorService es = Executors.newCachedThreadPool();
ScheduledExecutorService ses = Executors.newSingleThreadScheduledExecutor();
ses.scheduleAtFixedRate(new Runnable() {
    @Override
    public void run() {
        final Task task = tasks.poll();
        if (task == null) return;
        es.submit(new Runnable() {
            @Override
            public void run() {
                process(task);
            }
        });
    }
}, 0, 1000/ratePerSecond, TimeUnit.MILLISECONDS);

将任务添加到队列中,它们将以每秒10个的速度处理。



 类似资料:
  • 我有一个更新LetsEncrypt证书的Ansible任务。我只希望这项任务每周运行一次,以避免因重击API而受阻,但其余的任务需要每天运行- 有没有可能对一个可完成的任务进行速率限制,如果它在过去n小时内已经运行过,那么它将被跳过? 我能想到的最好的方法是,如果任务已运行,则触摸文件,如果文件存在并且比某个时间戳更新,则跳过任务 — 我确实想过在<code>ansible中对任务应用标记,并将标

  • 本文向大家介绍Laravel定时任务的每秒执行代码,包括了Laravel定时任务的每秒执行代码的使用技巧和注意事项,需要的朋友参考一下 laravel中的任务调度可以不将每条命令都写入crontab,便于管理维护,而且可以基于laravel框架环境运行,而不需写独立的脚本执行,非常方便,但是最小的执行间隔也是一分钟,要想达到每秒执行的效果,就要借助shll脚本了,在shell脚本里循环60次每秒执

  • 我有Spark 2.1.0运行在一个有N个从节点的集群上。每个节点有16个内核(8个内核/cpu和2个cpu)和1个GPU。我想使用map进程启动一个GPU内核。由于每个节点只有1个GPU,我需要确保两个执行器不在同一个节点上(同时)尝试使用GPU,并且两个任务不会同时提交给同一个执行器。 如何强制 Spark 每个节点有一个执行程序? 我尝试了以下方法: -设置:< code > $ SPARK

  • 我有一个类女巫负责向客户端发送数据,所有其他类在需要发送数据时都使用这个。让我们称之为“数据ender.class”。 现在客户端要求我们将吞吐量控制在每秒最多50次调用。 我需要在这个类上创建一个algoritm(如果可能的话),以保持当前秒的调用次数,如果它达到50的最大值,保持进程要么睡眠或某事,并继续而不丢失数据。也许我必须实现一个队列或比简单的睡眠更好的东西。我需要建议或遵循的方向。 为

  • 问题内容: 我有以下查询,它为每个查询获取最新的N : 我有指标的,,。 这是我想出的唯一解决方案,每个站最多可以获取单个记录。但是,它非常慢(81000条记录的表为154.0毫秒)。 如何加快查询速度? 问题答案: 假设至少Postgres 9.3。 指数 首先,多列索引将有助于: 的拟合度稍好一些,但如果不使用,索引仍将以几乎相同的速度向后扫描。 假设已定义,否则在索引 和 查询中考虑: Po