2015-12-09 98 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同時運行。