- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
在我的实践中,我开发的软件变得庞大而复杂,并且它的各个部分以自己的方式使用执行器的情况并不少见。从性能的角度来看,最好在每个部分使用不同的线程池配置。但是从可维护性和代码可用性的角度来看,如果所有与线程、并发性和 CPU 利用率相关的东西都保存并配置在某个集中的地方,那将是更可取的。
让每个需要并发执行或调度的类都创建自己的线程池是不行的,因为很难控制它们的生命周期和线程总数。
创建某种 ExecutorManager 并在应用程序周围传递一个线程池也不行,因为根据任务类型和提交率,工作队列和线程池大小的组合配置不当会严重损害性能。
所以问题是:是否有一些通用的方法可以解决这个问题?
最佳答案
我会创建 2 或 3 个线程池,它们可以根据它们执行的任务进行不同的配置,如果有超过 3 个不同的并发操作,你就会遇到更大的问题。
池可以在需要时注入(inject)(例如通过名称),另外我会创建一个注释来使用 AOP(例如 aspectj)使用特定的池/执行程序执行定义的方法。
注解解析器应该有权访问所有池/执行器,并使用注解中指定的任务提交任务。
例如:
@Concurrent ("pool1")
public void taskOfTypeOne() {
}
@Concurrent ("pool2")
public void taskOfTypeTwo() {
}
关于java - 如何管理执行者,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8096029/
所以我有一个排行榜,我每天使用以下查询有效地获取每个用户的分数: SELECT DATE(a.time) as time, a.userid, SUM(activity_weight) as weig
假设我有一个 ExecutorService(它可以是一个线程池,因此涉及到并发性),它在不同的时间执行一个任务,或者周期性地或者响应一些其他条件。要执行的任务如下: 如果此任务已在进行中,则什么也不
我正在运行的服务器应用程序收到多个任务请求,我想使用任务系统处理这些请求。 每个任务都表示为一个 Runnable,它将从线程池中请求 n 个线程,其中 n 小于或等于线程池大小。为了不线程过多导致
我有一个 long_task 函数,它运行大量 cpu 绑定(bind)计算,我想通过使用新的 asyncio 框架使其异步。生成的 long_task_async 函数使用 ProcessPoolE
Java 文档说 CompletableFuture:supplyAsync(Supplier supplier)在 ForkJoinPool#commonPool() 中运行任务而 Completa
我想了解 Spark Streaming 中的一个基本知识。我有 50 个 Kafka 主题分区和 5 个执行程序,我使用的是 DirectAPI,所以没有。 RDD 分区的数量将为 50。如何在 5
我的问题与 this one here 密切相关.正如在那里发布的那样,我希望主线程等到工作队列为空并且所有任务都已完成。然而,我的情况的问题是,每个任务都可能递归地导致提交新任务进行处理。这使得收集
我是一名优秀的程序员,十分优秀!