我想以反应式的方式创建一个临时文件,以避免阻塞调用。
Mono.fromCallable {
Files.createTempFile(null, ".zip")
}
.flatMap { path: Path ->
DataBufferUtils.write(
webclient.get().uri("/large-file.zip").retrieve()
.bodyToFlux(DataBuffer::class.java),
path,
StandardOpenOption.CREATE
).then(Mono.just(path))
}
然而,我在IDEA中收到了关于方法createTempFile
:的警告
在非阻塞上下文中阻塞调用可能导致线程饥饿
有没有一种方法可以以真正的被动方式创建这样的文件?
看起来我需要等待Loom:
在Linux上,我们计划使用io_uring进行异步文件I/O,同时我们正在使用ForkJoinPool.ManagedBlocker机制,通过在工作线程被阻塞时向工作线程池添加更多操作系统线程来平滑阻塞的文件I/O操作。
(来源:https://cr.openjdk.java.net/~rpressler/loom/loom/sol1_part1.html(