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