我正在开发一个基准应用程序,它使用用户定义的线程数来进行处理。我还在为基准测试结果开发可视化应用程序。
基准测试本身是用 C++ 编写的(并使用 pthreads 进行线程处理),而可视化工具是用 Python 编写的。
现在,我正在做的是stdout
从基准到可视化器的管道。这样做的好处是能够使用一种工具,例如netcat
在一台机器上运行基准测试并在另一台机器上运行可视化工具。
关于基准的一点:
- 它非常受 CPU 限制
- 每个线程每隔 10 毫秒写入一次重要数据(即我需要用于可视化器的数据)。
- 每个打印的数据是一行 5 到 20 个字符。
- 如前所述,线程数是高度可变的(可以是 1、2、40 等)
- 即使数据不被破坏很重要(例如,一个线程在
printf
/期间抢占另一个线程cout
,导致打印的数据与另一个线程上的输出交错),写入正确完成并不是很重要命令。
关于最后一点的示例:
// Thread 1 prints "I'm one\n" at the 3 seconds mark
// thread 2 prints "I'm two\n" at the 4 seconds mark
// This is fine
I'm two
I'm one
// This is not
I'm I'm one
two
在基准测试中,我从 切换到std::cout
,printf
因为它更接近write
(2),以尽量减少不同线程输出之间交错的机会。
我担心stdout
随着线程数量的增加,从多个线程写入会导致瓶颈。非常重要的是,基准的输出可视化部分对资源非常轻,以免扭曲结果。
我正在寻找一种有效的方法来让我的两个应用程序说话而不影响我的基准测试的性能而不是绝对必要的。有任何想法吗?你们中有人解决过这样的问题吗?任何更智能/更清洁的解决方案?