10

我一直在亞馬遜的AWS SDK中閱讀TransferManager做S3上傳,所提供的API允許非阻塞使用,但是我不清楚底層實現是否實際上做了異步I/O。是否適用於S3的AWS開發工具包中的TransferManager執行異步I/O?

我在source-code of TransferManager上做了一些閱讀,我無法理解提供的ExecutorService中的線程是否被阻塞。

我的問題是,如果這個管理器實際上沒有阻止該執行程序執行異步I/O,那麼我可以使用應用程序的全局線程池,這是用於CPU綁定的東西。那麼這實際上是在做異步I/O還是不是?

回答

10

分析並試圖瞭解SDK的源代碼後,我得出結論:是的,TransferManager不能異步工作,因爲它搭載在AmazonS3Client.putObject等調用上,而不阻塞線程本身,直到http請求完成,從而阻止處理線程池的隊列。

+1

AWS博客上的這篇文章有其他建議:https://java.awsblog.com/post/Tx2Q9SGR6OKSVYX/Amazon-S3-TransferManager – DGolberg 2014-09-30 14:54:13

+5

@DGolberg不,不是,博客文章不會聲明,除此之外經過幾個小時的檢查源代碼並進行分析後得到了證明。 TransferManager的API是非阻塞的,因爲它將工作卸載到配置的線程池,但該線程池中的線程被阻塞,因此無法執行其他任何操作。我可能會寫一篇關於它的文章。感謝您的反對票,沒有必要。 – 2014-09-30 18:36:24

+1

@AlexandruNedelcu事實上,我相信你是正確的,它是異步的,因爲如果你使用它,那麼你可以在你做任何API調用的線程中繼續做其他事情,但底層實現只是讓另一個線程來完成工作。有一個upvote = D – 2014-09-30 20:19:17

相關問題