10

S3 yüklemeleri yapmak için Amazon'un AWS SDK'sında TransferManager hakkında okudum, sağlanan API, engelleme kullanılmayan kullanıma izin veriyor, ancak temel uygulama asenkronize G/Ç gerçekten yapılıyorsa bana açık değil.Aktarım Denetleyici, S3 için AsSenkron G/Ç yaparken AWS SDK'sı mı?

source-code of TransferManager üzerinde biraz okuma yaptım ve sağlanan ExecutorService'daki iş parçacıklarının engellenip engellenmediğini anlayamıyorum.

Sorunum, bu yöneticinin aslında yürütücüyü engellemeden eşzamansız G/Ç yapması durumunda, uygulamanın CPU'yla ilişkili şeyler için kullanılan genel iş parçacığı havuzunu kullanabilmesidir. Bu aslında asenkron I/O yapıyor mu değil mi?

cevap

10

profilleme sonra ve AmazonS3Client.putObject ve bu tür aramaların üzerine bindirme yapar çünkü, evet, TransferManager uyumsuz çalışmıyor sonucuna vardık SDK'nın kaynak kodunu anlamaya çalışan, kendi başına konuları engelleme olmasa da, bir içeri http istekleri tamamlanana kadar döngü, böylece iş parçacığı havuzunun işlenmesinde ilerlemeyi engeller.

+1

AWS blogunda bu gönderi aksini önerir: https://java.awsblog.com/post/Tx2Q9SGR6OKSVYX/Amazon-S3-TransferManager – DGolberg

+5

@DGolberg no, öyle değil, bu blog yazısı aksini iddia etmiyor. Kaynak kodunu kontrol etmek ve profil yapmak için birkaç saat sonra kanıt elde ettim. TransferManager API'si, yapılandırılmış bir iş parçacığına iş yükünün boşaltılması anlamında engelleme yapmaz, ancak bu iş parçacığı dizisindeki iş parçacıkları engellenir ve bu nedenle başka bir şey yapmak için kullanılamaz. Muhtemelen bu konuda bir makale yazacağım. Aşağı oy için teşekkürler, gerekli değildi. –

+1

@AlexandruNedelcu Gerçekten de doğru olduğuna inanıyorum, çünkü eğer onu kullanıyorsanız, API çağrısı yaptığınız herhangi bir iş parçasında başka şeyler yapmaya devam edebilirsiniz, ancak temel uygulama sadece işi yapmak için başka bir iş parçacığı yapar. Bir upvote = D –

İlgili konular