Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/354.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java AWS SDK for S3中的TransferManager是否正在执行异步I/O?_Java_Asynchronous_Amazon Web Services_Amazon S3_Asyncfileupload - Fatal编程技术网

Java AWS SDK for S3中的TransferManager是否正在执行异步I/O?

Java AWS SDK for S3中的TransferManager是否正在执行异步I/O?,java,asynchronous,amazon-web-services,amazon-s3,asyncfileupload,Java,Asynchronous,Amazon Web Services,Amazon S3,Asyncfileupload,我一直在Amazon的AWS SDK中阅读有关S3上传的内容,提供的API允许非阻塞使用,但是我不清楚底层实现是否真的执行异步I/O 我阅读了一些关于的内容,无法理解所提供的ExecutorService中的线程是否被阻止 我的问题是,如果这个管理器实际上在不阻塞执行器的情况下执行异步I/O,那么我就可以使用应用程序的全局线程池,该池用于CPU绑定的东西。那么这是否真的在进行异步I/O呢?在分析并试图理解SDK的源代码之后,我得出结论,是的,TransferManager不异步工作,因为它在Am

我一直在Amazon的AWS SDK中阅读有关S3上传的内容,提供的API允许非阻塞使用,但是我不清楚底层实现是否真的执行异步I/O

我阅读了一些关于的内容,无法理解所提供的
ExecutorService
中的线程是否被阻止


我的问题是,如果这个管理器实际上在不阻塞执行器的情况下执行异步I/O,那么我就可以使用应用程序的全局线程池,该池用于CPU绑定的东西。那么这是否真的在进行异步I/O呢?

在分析并试图理解SDK的源代码之后,我得出结论,是的,
TransferManager
不异步工作,因为它在
Amazon3Client.putObject
和此类调用上进行了搭载,而本身并没有阻塞线程,循环直到http请求完成,从而阻止处理线程池队列的进度。

AWS博客上的这篇文章提出了不同的建议:@DGolberg不,不是,那篇博客文章没有提出其他要求,而且我在检查源代码和进行分析数小时后得到了证据。TransferManager的API是非阻塞的,这意味着它将工作卸载到已配置的线程池中,但该线程池中的线程是阻塞的,因此无法执行任何其他操作。我可能会写一篇关于它的文章。谢谢你的否决票,这是不必要的。@AlexandruNedelcu我确实相信你是正确的,它是异步的,因为如果你使用它,那么你可以在你调用API的任何线程中继续做其他事情,但是底层实现只是让另一个线程来做这项工作。投票表决=D@AlexandruNedelcu我想我对你的问题的理解是错误的;我为此道歉。在当前线程上使用传输管理器是异步的,但不,正如您所述,底层线程不是。我需要记住,在睡眠不足的情况下,不要再试图回答问题了…@DGolberg没关系,我问自己这个问题是因为我想知道在一个应用程序中,我是否应该使用应用程序为CPU受限任务配置的全局有限线程池。出于效率方面的考虑,它会很酷,但我们有一个线程池,用于阻止I/O内容,TransferManager仍然很酷,因为它可以同时批处理多个上传。