我正在彻底学习 Spring Boot,并且正在学习如何上传文件,在我的示例中,我将把路径存储在数据库中,并将内容存储在可公开访问的文件系统中。
我希望这更多是一个一般性问题,但如果有关于 Spring Boot 的某些细节使其相关,我想知道。
据我所知,虚拟线程是我们可以轻松编写正常的阻塞代码,并且 JVM 在遇到阻塞代码时会挂起虚拟线程。
考虑到这一点,如果我使用虚拟线程并且想要使用文件系统,我应该使用常规阻塞 java.io 文件类还是仍然使用 java.nio ?
NIO 包是否提供了更多检查和设置文件权限的功能?
无论如何,我正在学习旧的 java.io,但如果需要的话我可以随时转向 NIO
java.io
使用阻塞 I/O 模型,其中执行 I/O 操作(如从文件或网络读取)的线程将阻塞并等待操作完成。
虚拟线程可以在传统意义上阻塞(例如等待 I/O),但这样做时它们不会占用系统资源。这允许您使用阻塞式代码(如
java.io
),而没有阻塞的缺点。
因此,使用虚拟线程可以缓解
java.io
操作中的资源阻塞。
java.nio
提供非阻塞 I/O 操作,允许单个线程无阻塞地管理多个通道(如套接字)。
如果您的目标是高并发和最大性能(通过您手写的代码),我认为您应该使用
java.nio
。
如果高并发对您的服务器并不重要,您可以使用
java.io
,它比java.nio
更容易实现和维护,并与虚拟线程一起使用,以避免资源阻塞,并获得非常好的性能和可扩展性。