Является ли TransferManager в AWS SDK для S3 выполняющим асинхронный ввод-вывод?

Я читал о TransferManager в SDK Amazon AWS для выполнения загрузки S3, предоставленный API позволяет использовать неблокирующее использование, однако мне непонятно, реализует ли базовая реализация асинхронный ввод-вывод.

Я читал в исходный код TransferManager, и я не могу понять, заблокированы ли потоки в предоставленном ExecutorService или нет.

Моя проблема заключается в том, что если этот менеджер фактически выполняет асинхронный ввод-вывод без блокировки этого исполнителя, я мог бы использовать глобальный пул потоков приложения, предназначенный для связанных с процессором материалов. Так это на самом деле делает асинхронный ввод-вывод или нет?

Ответ 1

После профилирования и попытки понять исходный код SDK я пришел к выводу, что да, TransferManager не работает асинхронно, потому что он контагирует на AmazonS3Client.putObject и такие вызовы, не блокируя потоки как таковые, перейдите в цикл до тех пор, пока HTTP-запросы не будут завершены, что предотвратит прогресс в обработке очереди пула потоков.