java - Amazon S3 是否有连接池?

标签 java amazon-web-services 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 连接池。可以通过the ClientConfiguration class调整HTTP连接池的最大大小可以传递给客户端对象构造函数。

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

关于java - Amazon S3 是否有连接池?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16354966/

相关文章:

java - JVM常量池索引值必须大于0才有效,这是为什么呢?

Java 正则表达式无法匹配一行注释

java - 测试将文件拖放到应用程序上

amazon-web-services - 如何在云形成模板中不使用互联网访问将ec2连接到s3

amazon-web-services - AWS lambda 工作正常但我无法返回值

amazon-s3 - 如何在不下载 tar 的情况下从 s3 中的 tar 文件中读取选定的几个文件?

amazon-web-services - 使用 AWS SDK 通过 Direct Connect、VPC 和 VPC 终端节点从本地世界访问 AWS S3

Java swing 在 ContentPane 中交换 ImagePanel

ruby-on-rails - Rails、Puma、Sidekiq 如何计算总数据库连接数?

amazon-web-services - 使用cloudformation调整ec2实例的根卷大小