阿里云函数计算(三)生命周期
生命周期
考虑这样一个问题
在使用函数计算的时候,可以将其看做一个“函数”,给定了入参和返回类型,而方法体的实现就是最终上传的jar包的文件。那么不由得思考到了一个问题,这个“函数”在执行一次后会不会立即结束生命周期,或者说,每一次调用函数计算的接口会新建一个实例并在调用结束后清理这个实例,还是多次调用会使用同一个函数计算的实例,又或者有其他的策略呢?在这里我们不妨通过编写代码进行简单的测试。
代码测试
代码的实现十分简单,只需要定义一个satic的变量,每次调用时进行累加,比对多次调用输出的结果即可得到答案。因为逻辑简单,因此创建入口类的时候选择实现StreamRequestHandler。代码如下:
public class Lifecycle implements StreamRequestHandler {
private static int count = 1;
@Override
public void handleRequest(InputStream inputStream, OutputStream outputStream, Context context) throws IOException {
String output = "the value of count is:" + count++;
outputStream.write(output.getBytes());
}
}
代码编写完后,mvn打包上传到函数计算上运行。
运行结果
第一次执行后结果如图:
第二次运行的结果:
显而易见,第二次调用count值在第一次调用的基础上+1,说明第二次调用没有重新创建新的函数计算的实例。那么,是不是这个实例创建后就不会主动销毁,除非用户停掉它呢?这个问题不妨过一段时间再调用看看结果。大概半个小时后再次执行,结果如图:
发现值为1说明这次调用创建了新的实例
结论
由此可知在第一次调用函数计算时会创建一个实例来执行你上传的代码,并在执行后的一段时间内保持一种“休眠”的状态,一段时间内的在此调用会将其“唤醒”,而当这段时间内无调用时会将其销毁。