0

我创建了一个 Java 应用程序,其中 GUI 与外部 C++ 可执行文件交互。

我正在使用 ProcessBuilder 从 C++ 可执行文件创建并将输入/输出/错误附加到 GUI。我正在使用大小为 1024 的缓冲区。如果 C++ 以非常高的速度执行大量 printf 语句,而 Java GUI 读取 1024 大小的字符怎么办?这会造成瓶颈吗?

public void run()
{
        try
        {
            char[] buffer = new char[1024];
            for (int n = reader.read(); n != -1; n = reader.read(buffer))
            {
                writeBytes2Text(buffer, 0, n);
            }
        }
        catch (Exception x) 
        {
            //some exception
        }
    }
4

2 回答 2

0

无论缓冲区大小如何,瓶颈都会存在。唯一真正的出路是尽可能优化 Java 方面。例如,以适当的间隔更新 GUI,尽可能多地缓冲以弥补时间差距。通常不那么频繁、粗粒度的更新会提高吞吐量。

于 2013-06-30T11:21:46.997 回答
0

1024 字节的缓冲区大小很好,但 4096 可能会稍微好一些。

大多数延迟将来自上下文切换、睡眠和唤醒线程。除非 Java 端缓冲区大小要小得多,否则不会引入吞吐量问题。

C++ 输出流可能会使用默认的 4096 字节输出缓冲区。如果 C++ 进程正在缓慢打印输出,则在累积 4096 个字节之前,您将看不到任何输出。

于 2013-06-30T12:56:08.573 回答