您好,我已经为Kinesis流创建了一个AWS Lambda函数,批处理大小为100,并尝试在多线程环境下执行它,但问题是在多线程环境下,与单线程相比速度非常慢。例如可以分享以下数字:对于512 MB和60秒超时,Lambda函数在684毫秒内执行了955条记录,以及在435毫秒内执行了1031条记录,而对于多线程,则在相同的内存(即512 MB和60秒超时)下,在878808毫秒内执行430条记录,并在893862毫秒内执行433条记录。
以下是我的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函数处理缓慢背后的原因是什么?如果我希望这个函数比单线程函数更快地工作,那么我应该在这段代码中进行哪些修改?
count
是在哪里定义的? - Jan