结构化并发应用程序
大多数并发应用程序都是围绕“任务执行”来构造的。任务通常是一些抽象的且离散的工作单元。通过把应用程序的工作分解到多个任务中,可以简化的组织结构,提供一种自然的事务边界来优化错误恢复过程,以及提供一种自然的并行工作结构来提升并发性。
在线程中执行任务
大多数服务器应用程序都提供了一种自然的任务边界选择方式:以独立的客户请求为边界。这样,既可以实现任务的独立性,又可以实现合理的任务规模。
在正常的负载下,服务器应用程序应该同时表现出良好的吞吐量和快速的响应性。应用程序提供商希望程序支持尽可能多的用户,从而降低每个用户的服务成本。
显示的为任务创建线程
通过为每个请求创建一个新的线程来提供服务,从而实现更高的响应性。
缺点
- 线程生命周期的开销非常高。
- 资源消耗。
- 稳定性。
Executor框架
executor解决了串行执行效率低的问题和为每个任务创建线程的资源管理复杂性。任务的抽象不再是Thread,而是Executor。
Executor基于生产消费者模式,提交任务的操作相当于生产者(生成待完成的工作单元),执行任务的线程相当于消费者(执行完这些工作单元)。
为任务设置时限
有时候,如果某个任务无法在指定时间内完成,那么将不再需要它的结果。此时可以放弃这个任务。在有限的时间内执行任务的主要困难在于,要确保得到答案的时间不会超过限定的时间。在支持时限的Future.get中支持这种需求,
总结
这本书的文字写得很有逻辑,读起来很畅快。结合几种简单的情况一步一步讲解不同的处理方式。优缺点,如何改进的。
关于并发的事,工作中是更多是要利用JDK提供的类和方法去处理,熟悉JDK提供的库相关使用。
其它的
结构化并发应用程序
https://blog.fengcl.com/2017/11/25/structuring-concurrent-applications/