9

我正在阅读有关如何使用 java nio 库来利用称为“零复制”的 O/S 级别的文件传输/缓冲的信息。

那么您创建/写入文件的方式有什么区别?使用零拷贝有什么缺点吗?

4

2 回答 2

8

零拷贝意味着你的程序不会将数据从内核空间传输到用户空间等等。这是更快的好文章,可以在这里找到:http: //www.ibm.com/developerworks/library/j-zerocopy/

于 2012-05-11T15:33:51.117 回答
6

零拷贝是一种技术,应用程序不再是从磁盘传输数据到套接字的“中间人”。使用零拷贝的应用程序请求内核直接将数据从磁盘文件复制到套接字,而不经过应用程序,这样可以提高性能并减少上下文切换。

这完全取决于应用程序将如何处理从磁盘读取的数据。如果它是一个通过读取文件并通过套接字中继它们来提供大量静态内容的 Web 应用程序,那么零拷贝是获得更好性能的方法。但是,如果应用程序在本地使用数据(以某种方式对其进行处理然后将其写回,或者在本地显示它而不将其持久化),您将不会使用零拷贝。

这篇关于零拷贝的IBM DeveloperWorks 文章值得一读。

Java 中文件 I/O 的其他方式是通过使用基于您想要读/写的文件类型的 Stream 类。这涉及缓冲和非缓冲流,尽管通常缓冲流承诺更好的性能,因为它们导致更少的 I/O 搜索周期,因此更少的上下文切换。

于 2012-05-11T15:32:25.570 回答