目前我们的应用程序(Java)在使用线程。但是一次会创建大约1000个或更多的线程。这些线程应该处理数据并将其存储在数据库中。
这消耗了更多的内存和I/O。
有什么最好的替代方法吗? 可扩展性、一致性和性能是主要要求。
目前我们的应用程序(Java)在使用线程。但是一次会创建大约1000个或更多的线程。这些线程应该处理数据并将其存储在数据库中。
这消耗了更多的内存和I/O。
有什么最好的替代方法吗? 可扩展性、一致性和性能是主要要求。
你尝试过线程池了吗?线程池由适量的线程组成(足以使用所有处理器,但不多),重复利用线程(再次减少开销)并同时执行大量任务。
这里有一个小例子来给你一个想法。
ExecutorService executor = Executors.newFixedThreadPool(5);
Runnable job = new Runnable() {
public void run() {
// do some work
}
}
executor.execute(job);
如果您查看ScheduledThreadPoolExecutor
,您会发现有很多特性可用于执行和调度作业。尝试了解一下Actor模型。
Actor模型是一种并发编程模型,其中工作负载被分配给并行运行的实体,称为actors。
它是一种没有共享状态的模型,actors是隔离的,信息可以以消息的形式流动。
玩家接收这些消息,并且只能通过操作消息中的数据(计算或处理数据),向其他玩家发送消息或创建新actor来进行反应。
该模型是互斥锁和线程的高级抽象,消除了开发人员的复杂性,主要是由Ericsson于1973年在Erlang上设计用于构建高度可用的竞争电信系统。
演员是非常轻量级的并发实体。他们使用基于事件驱动的接收循环异步地处理消息。对消息进行模式匹配是表达演员行为的一种方便方式。它们提高了抽象级别,使编写、测试、理解和维护并发和/或分布式系统变得更加容易。您可以关注工作流程——消息在系统中的流动方式——而不是线程、锁和套接字IO等低级原语。