Amazon S3是否有连接池?

我曾经用过代码

public static AmazonS3Client s3 = null;

...

BasicAWSCredentials c = new BasicAWSCredentials("absadgwslkjlsdjgflwa");

s3 = new AmazonS3Client(c);

仅创建一个实例s3,而数十个线程将通过s3.putObject()上传图像。在转储信息中,我可以看到一个线程将锁定唯一的实例s3,而其他线程则在等待。

因此,我认为如果使用以下代码,可能会更快:

BasicAWSCredentials c = new BasicAWSCredentials("absadgwslkjlsdjgflwa");

for(int i = 0; i < 10; i++)

amazonS3[i] = new AmazonS3Client(c);

每次系统获得一个随机的s3实例,然后上传图像。

private static AmazonS3 getS3(){

int i = (int)(Math.random() * 10);

return amazonS3[i];

}

但似乎系统速度变慢。为什么会这样?也许唯一的实例s3已经使用了连接池?我很困惑。

回答:

适用于Java的AWS开发工具包中的每个客户端(包括Amazon

S3客户端)当前都维护其自己的HTTP连接池。您可以通过ClientConfiguration类调整HTTP连接池的最大大小,该类可以传递到客户端对象构造函数中。

我们建议共享客户端对象,因为过多的HTTP连接池无法有效利用这些开销和开销。当您像这样跨线程共享客户端对象时,应该会看到更好的性能。

以上是 Amazon S3是否有连接池? 的全部内容, 来源链接: utcz.com/qa/422162.html

回到顶部