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函數處理緩慢的原因是什麼?如果我想讓這個函數比單線程函數工作得更快,那麼我應該在這段代碼中做些什麼改變?
更清晰了,謝謝。但是,仍然 - 爲每個執行元素啓動一個新線程的好處在哪裏? – Jan
@Jan http://docs.aws.amazon.com/lambda/latest/dg/java-gs.html!= java的8 lambda函數,但因爲你定義在雲中運行一個函數概念相似。 – zapl
@Akshay:你可以分享單線程代碼以便比較嗎? 'count'定義在哪裏? – Jan