AWS Lambda Java多线程

时间:2015-12-09 13:24:16

标签: java multithreading amazon-kinesis aws-lambda

您好我为Kinesis流制作了一个AWS Lambda函数,批量大小为100&我试图在多线程环境中执行它,但问题是在多线程环境中,与单线程相比,它工作得很慢..就像我可以分享你的数字:对于512 MB,60秒超时,Lambda函数在684毫秒内执行955条记录& 435毫秒的1031条记录&对于多线程,它在878808 ms内执行430条记录。相同内存的893862 ms中的433条记录(即512 MB和60秒超时)

以下是我的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 个答案:

答案 0 :(得分:2)

另外两个选项:

  1. 让您的初始Lambda使用SDK异步启动实际工作的其他lambda(扇出)
  2. 将Lambda调度与调度偏移和长时间超时配合使用,以便同时运行多个lambda。