浏览 7294 次
锁定老帖子 主题:线程池和车间模式
精华帖 (0) :: 良好帖 (0) :: 新手帖 (9) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2010-11-21
一个对象,需要多个步骤处理,之所以要分开处理,是因为: 1、这样的对象很多 2、每个步骤耗时不一样,有的步骤可能是IO操作 使用JDK自带的ExecutorService pool = Executors.newFixedThreadPool(10)方式很容易实现线程池的管理 在车间中,车间只负责对对象进行处理,车间甚至不需要知道怎么获取需要处理的对象,也不需要知道处理完成对象之后交到何处,因为这个可以由别的资源来处理这个对象的传输、调度问题。 注:图示中所用标记不一定很准确,只是想描述一下问题 。 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2010-11-22
没看明白这两个方案有什么区别。
另外,可不可以这样呢: 开始 -> 队列 -> 线程池 -> 线程1 步骤1、2、3... -> 线程2 步骤1、2、3... -> 线程3 步骤1、2、3... -> 线程4 步骤1、2、3... |
|
返回顶楼 | |
发表时间:2010-11-22
线程池???什么东西,没有听过的
|
|
返回顶楼 | |
发表时间:2010-11-22
“车间模式”不是工厂模式!
|
|
返回顶楼 | |
发表时间:2010-11-24
hardPass 写道 没看明白这两个方案有什么区别。
另外,可不可以这样呢: 开始 -> 队列 -> 线程池 -> 线程1 步骤1、2、3... -> 线程2 步骤1、2、3... -> 线程3 步骤1、2、3... -> 线程4 步骤1、2、3... 线程池模式中,任务的生命周期短,创建——>加入线程池,等待执行——>执行任务——>结束 而车间模式中,一个车间线程从程序开始的时候创建,知道程序结束的时候销毁,中途是不需要销毁的,一直在处理待加工数据,没有数据的时候则空闲 一个比喻:将一批带泥土的萝卜,制造成餐桌上菜肴的装饰品 加工过程:清洗、雕刻、送货 线程池模式:你找来甲乙丙三人(三个线程池),你将萝卜交给甲,并告诉甲“你将处理好的萝卜清洗好了交给乙”,然后你告诉乙“你将萝卜雕刻好了交给丙”,然后你又告诉丙“你将萝卜送到餐馆”。但是甲乙丙都不会自己干活,他们分别掌握了清洗设备、雕刻设备、运输设备这些资源,然后对每个萝卜的处理,他们都是另外从人才市场找一个人,来处理,处理完成了之后,招聘会来的那个人就解雇。 车间模式:你将萝卜分成几份,分别交给不同的清洗公司(车间线程一)清洗,然后你从清洗公司取回清洗好的萝卜,然后交给不同的雕刻公司(车间线程二),然后你从雕刻公司取回雕刻好的萝卜,找了不同的运输公司(车间线程三)运输到目标餐馆。这个过程,你不是等所有萝卜都清洗好了再处理,如果精力允许,你是不断在做这个事情,你取清洗公司,取回部分清洗好的萝卜,将这些萝卜送到雕刻公司,顺便从雕刻公司取回已经雕刻好的萝卜,然后将雕刻好的萝卜送到运输公司,让运输公司送到餐馆。 考虑这样一种情况,就比较麻烦,情况如下: 步骤1:从互联网上下载数据 步骤2:分析数据,进行逻辑处理,例如对每一条数据加密100万次 步骤3: 将分析结果存入数据库 考虑因素:从互联网上下载数据是跟带宽有关的,数据加密100万次是跟CPU资源有关的 从互联网上下载是比较慢的,不需要消耗太多的CPU资源;而进行100万次的数据加密,是非常消耗CPU资源的,你的方式会使得各个线程在一开始的时候都去等待网络资源,然后又都等待CPU资源。其实在下载的时候消耗网络资源,实际上线程可以开得少一点,而加密数据比较耗时,可以多开一些线程。 |
|
返回顶楼 | |
发表时间:2010-11-24
很抽象,没接触过这些
|
|
返回顶楼 | |
发表时间:2010-11-24
很想了解车间模式.我目前是用第一种,其中每个子线程下使用了工厂模式,再开线程。
|
|
返回顶楼 | |
发表时间:2010-11-25
mimang2007110 写道 线程池???什么东西,没有听过的
就是把一堆线程扔到一个数组里,有一个线程专门维护这个数组里的线程。就叫线程池。 |
|
返回顶楼 | |
发表时间:2011-03-31
两种方案实现的功能是一样的,我感觉第一种方案适合那种小的程序,第二种方案适合复杂的程序
|
|
返回顶楼 | |