【发布时间】:2015-05-31 16:13:57
【问题描述】:
原创
我有一个批处理作业,它将从各种 URL 下载的内容传递到 S3 存储。我目前正在使用阻塞 IO,并且由于 IO,我的工作大部分时间都是 IO bound 阻塞的。所以为了加快整个过程,我一直在考虑使用非阻塞 IO。
很遗憾,我找不到用于将内容从一组通道传递到另一组通道的实用程序代码。由于我读到编写正确的非阻塞代码并不容易,因此我更愿意使用现有的实用程序/框架而不是自己编写该代码。
TransferManager 似乎是使用 AWS 开发工具包时提高吞吐量的唯一可能选项,但它仅提供流的使用,并且似乎在后台使用 IO 线程。显然没有开箱即用的非阻塞上传到 S3 的选项。
你会推荐什么?目前我只能想象以下解决方案。
- 保持阻塞 IO 并使用我自己的 IO 线程池
- 使用非阻塞 IO 将文件下载到本地文件系统,然后使用 TransferManager 上传
- 使用非阻塞 IO 进行直通
选项 1 显然无法扩展,而选项 2 可能会工作一段时间,但我真的很想在 EBS 上保持低 IO,所以我宁愿使用 3。
要成功实施选项 3,我想我必须自己实施很多,所以我的最后一个问题是,您是否认为值得,如果是,我可以使用哪些工具来完成这项工作。
编辑 1
澄清说,IO 绑定实际上是指该作业主要是在等待 IO。在这里你可以看到我的带宽并没有真正饱和,但如果可能的话,我希望它是饱和的。
【问题讨论】:
-
非阻塞上传是什么意思?什么io是绑定的?磁盘读取?写?网络阅读?写?
-
请看我更正的问题。
标签: java amazon-s3 nio nonblocking aws-sdk