10

Czytałem o TransferManager w SDK Amazon AWS do robienia wysyłek S3, pod warunkiem, że API pozwala na nie blokowanie użycia, jednak nie jest jasne, czy podstawowa implementacja faktycznie wykonuje asynchroniczne operacje we/wy.Czy program TransferManager w pakiecie AWS SDK dla S3 wykonuje asynchroniczne operacje we/wy?

Zrobiłem trochę czytania na source-code of TransferManager i nie mogę zrozumieć, czy wątki w podanym ExecutorService są blokowane, czy nie.

Mój problem polega na tym, że jeśli ten menedżer faktycznie wykonuje asynchroniczne operacje we/wy bez blokowania tego executora, mógłbym użyć globalnej puli wątków aplikacji przeznaczonej dla zasobów związanych z procesorem. Czy to faktycznie wykonuje asynchroniczne operacje we/wy lub nie?

Odpowiedz

10

Po profilowania i próbuje zrozumieć SDK kod źródłowy doszedłem do wniosku, że tak, TransferManager nie działa asynchronicznie, ponieważ piggybacks na AmazonS3Client.putObject i takich połączeń, a nie blokowanie wątków per se, pójść w aż do zakończenia żądań http, co uniemożliwi postęp w przetwarzaniu kolejki puli wątków.

+1

Ten wpis na blogu AWS sugeruje inaczej: https://java.awsblog.com/post/Tx2Q9SGR6OKSVYX/Amazon-S3-TransferManager – DGolberg

+5

@DGolberg nie, nie jest, ten post na blogu nie twierdzi inaczej, a poza tym Otrzymałem dowód po kilku godzinach sprawdzania kodu źródłowego i profilowania. Interfejs API narzędzia TransferManager nie jest blokowany, w tym sensie, że przesyła pracę do skonfigurowanej puli wątków, ale wątki w tej puli wątków są blokowane, a zatem niedostępne dla robienia czegokolwiek innego. Prawdopodobnie napiszę o tym artykuł. Dzięki za głosowanie, nie było konieczne. –

+1

@AlexandruNedelcu Rzeczywiście wierzę, że masz rację, to jest asynchroniczne w tym sensie, że jeśli używasz go, możesz kontynuować robienie innych rzeczy w dowolnym wątku, z którego wywołałeś wywołanie API, ale podstawowa implementacja właśnie tworzy kolejny wątek do wykonania pracy. Mieć upvote = D –

Powiązane problemy