2015-12-09 95 views
4

您好我已经为Kinesis流提供了批量为100的AWS Lambda函数我试图在多线程环境中执行它,但问题是在多线程环境中,它的工作非常慢比较单线程。像我可以分享你的数字:512 MB 60秒计算的逾,lambda函数执行955个记录在684毫秒& 1031记录在435毫秒&对于多线程它在878808毫秒& 433条记录执行430个记录在893862毫秒为相同的内存(即512 MB & 60秒超时)AWS Lambda Java多线程

以下是我的Lambda函数代码正在多线程行为中执行:

public String myHandler(final KinesisEvent kinesisEvent, final Context context) { 
     Thread thread = new Thread(new Runnable(){ 

      //@Override 
      public void run() { 
       int singleRecord=0; 
       long starttime=System.currentTimeMillis(); 
       //LambdaLogger lambdaLogger=context.getLogger(); 
       for(KinesisEventRecord rec : kinesisEvent.getRecords()) 
       { 
        singleRecord=0; 
        System.out.println("Kinesis Record inside is:"+new String(rec.getKinesis().getData().array())); 
        //count++; 
        singleRecord++; 
        // System.out.println(new String(rec.getKinesis().getData().array())); 
       } 
       count=count+singleRecord; 
       long endtime=System.currentTimeMillis(); 
       long totaltime = endtime-starttime; 
       time=time+totaltime; 
       System.out.println("Time required to execute single Lambda function for "+singleRecord+" records is"+" :: "+totaltime+" milliseconds"); 
       System.out.println("Total time required to execute Lambda function for "+count+" records is"+" :: "+time+" milliseconds"); 
      } 
     }); 
     thread.start(); 
     return null; 
    } //end of handler method 

Lambda函数在多线程环境中执行缓慢吗?我想知道这个多线程Lambda函数处理缓慢的原因是什么?如果我想让这个函数比单线程函数工作得更快,那么我应该在这段代码中做些什么改变?

+1

更清晰了,谢谢。但是,仍然 - 为每个执行元素启动一个新线程的好处在哪里? – Jan

+1

@Jan http://docs.aws.amazon.com/lambda/latest/dg/java-gs.html!= java的8 lambda函数,但因为你定义在云中运行一个函数概念相似。 – zapl

+0

@Akshay:你可以分享单线程代码以便比较吗? 'count'定义在哪里? – Jan

回答

1

另外两个选项:

  1. 让你的初始LAMBDA使用SDK异步推出进一步lambda表达式,实际上做的工作(扇出)
  2. 使用LAMBDA调度与调度偏移和长超时,这样你有多个lambda同时运行。