庄周梦蝶

生活、程序、未来
   :: 首页 ::  ::  :: 聚合  :: 管理

写一个简单的工作流(三)

Posted on 2007-10-12 13:01 dennis 阅读(1048) 评论(9)  编辑  收藏
    上午测试了下并发情况下的表现,测试场景:一个有20个节点,包括选择、顺序、并行路由的流程,所有节点都设置为自动执行,1000个线程并发启动案例,也就是这个流程同时有1000个案例在跑,全部跑完结果差强人意,比单线程慢了接近30倍。仔细调整了算法和加锁粒度,尽管整体性能有所提高,但是多线程和单线程间执行的差距仍然没有多大变化,性能瓶颈还是在核心的调度算法上,还需要分析下。测试程序如下:
package net.rubyeye.insect.workflow.test;

import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.CyclicBarrier;

import net.rubyeye.insect.workflow.Place;
import net.rubyeye.insect.workflow.Token;
import net.rubyeye.insect.workflow.Transition;
import net.rubyeye.insect.workflow.WorkFlow;
import net.rubyeye.insect.workflow.WorkFlowManager;
import net.rubyeye.insect.workflow.basic.BasicWorkflowManager;
import net.rubyeye.insect.workflow.comm.TransitionType;
import net.rubyeye.insect.workflow.config.DefaultConfiguration;
import junit.framework.TestCase;

public class CompositeProcessTest extends TestCase {
    
private WorkFlowManager wm;

    WorkFlow composite;

    
private CyclicBarrier barrier;

    
private static final int total = 1000;

    @Override
    
protected void setUp() throws Exception {
        
this.barrier = new CyclicBarrier(total + 1);
        wm 
= new BasicWorkflowManager();
        wm.setConfiguration(
new DefaultConfiguration());

        WorkFlow sequence 
= wm.getWorkFlow("sequence");
        WorkFlow concurrency 
= wm.getWorkFlow("concurrency");
        WorkFlow choose 
= wm.getWorkFlow("choose");

        
// 组合流程
        composite = new WorkFlow();
        composite.setName(
"composite");
        composite.setId(
100);

        wm.saveWorkFlow(composite);

        
// 修改开始结束节点的输入输出库所
        sequence.getEnd().setType(TransitionType.NORMAL);
        sequence.getEnd().setOutputs(concurrency.getStart().getInputs());

        concurrency.getEnd().setType(TransitionType.NORMAL);
        concurrency.getEnd().setOutputs(choose.getStart().getInputs());

        composite.setStart(sequence.getStart());
        composite.setEnd(choose.getEnd());
        List
<Transition> transitions = new ArrayList<Transition>();
        transitions.addAll(sequence.getTransitions());
        transitions.addAll(concurrency.getTransitions());
        transitions.addAll(choose.getTransitions());
        composite.setTransitions(transitions);
    }

    
public void testConcurrencyCompositeProcesss() throws Exception {
        
for (int i = 0; i < total; i++) {
            
new FlowThread().start();
        }
        barrier.await();
        
long start = System.currentTimeMillis();
        barrier.await();
        
long end = System.currentTimeMillis();
        System.out.println(
"创建" + total + "个流程并发运行完毕\n花费时间:" + (end - start)
                
/ 1000.0 + "");
        
for (Transition transition : composite.getTransitions()) {
            System.out.println(transition.getName() 
+ "  "
                    
+ transition.isEnable());
            
for (Place place : transition.getOutputs()) {
                System.out.println(
"place " + place.getId() + " "
                        
+ place.getTokens().size());
            }
        }
    }

    
public void testCompositeProcesss() throws Exception {
        
long start = System.currentTimeMillis();
        
for (int i = 0; i < total; i++) {
            Token token1 
= wm.startWorkFlow("composite");
            token1.setAttribute(
"name""dennis");
            token1.setAttribute(
"num"21);
            wm.doAction(token1.getId());
            assertTrue(token1.isFinished());
        }
        
long end = System.currentTimeMillis();
        System.out.println(
"创建" + total + "个流程运行完毕\n花费时间:" + (end - start)
                
/ 1000.0 + "");
    }

    
class FlowThread extends Thread {

        @Override
        
public void run() {
            
try {
                barrier.await();
                
// wm = new BasicWorkflowManager();
                Token token1 = wm.startWorkFlow("composite");
                token1.setAttribute(
"name""dennis");
                token1.setAttribute(
"num"21);
                wm.doAction(token1.getId());
                assertTrue(token1.isFinished());
                barrier.await();
            } 
catch (Exception e) {
                
throw new RuntimeException(e);
            }
        }

    }
}


评论

# fatdiminishersystem91202  回复  更多评论   

2015-10-30 21:08 by I know this if off topic but I'm looking into star
I know this if off topic but I'm looking into starting my own weblog and was curious what all is needed to get set up? I'm assuming having a blog like yours would cost a pretty penny? I'm not very internet smart so I'm not 100% certain. Any suggestions or advice would be greatly appreciated. Many thanks

# numériservoscassettes39866  回复  更多评论   

2015-11-01 10:21 by I want to to thank you for this very good read!! I
I want to to thank you for this very good read!! I absolutely loved every bit of it. I have you book-marked to check out new things you post…

# loansforpeoplewithbadcredit71577  回复  更多评论   

2015-11-02 03:02 by If some one desires to be updated with latest tech
If some one desires to be updated with latest technologies afterward he must be visit this website and be up to date all the time.

# skisafari2triche85524  回复  更多评论   

2015-11-04 08:15 by You ought to take part in a contest for one of the
You ought to take part in a contest for one of the finest websites on the web. I'm going to recommend this website!

# clashofclanshack804  回复  更多评论   

2015-11-19 10:34 by You need to learn about the content and safety set
You need to learn about the content and safety settings of your game systems. The picture to the right is of one of the many rites you can earn in the game. Try to keep your stash of wood as low as possible to minimize the wood losses during attacks.

# clashofclanshack20181  回复  更多评论   

2015-11-19 21:18 by If you wish to give a game a try, the library may
If you wish to give a game a try, the library may have a copy. Make sure to take breaks between quests, races and fights. Give a warning, first and maybe even start a new activity.

# japanesegirlsmovie19025  回复  更多评论   

2016-04-06 20:23 by Its like you read my mind! You seem to know a lot
Its like you read my mind! You seem to know a lot about this, like you wrote the book in it or something. I think that you could do with a few pics to drive the message home a little bit, but other than that, this is great blog. A fantastic read. I will definitely be back.

# clashofclanshack1155  回复  更多评论   

2016-06-14 22:17 by Very clean site, thanks for this post.
Very clean site, thanks for this post.

# vitamind28448  回复  更多评论   

2016-08-13 18:48 by Good post. I learn something totally new and chall
Good post. I learn something totally new and challenging on sites I stumbleupon on a daily basis. It will always be helpful to read content from other writers and practice something from their web sites.

只有注册用户登录后才能发表评论。


网站导航: