有许多在线评判网站可以通过将其输出与正确答案进行比较来验证您的程序。更重要的是,他们还会检查运行时间和内存使用情况,以确保您的程序不超过最大限制。
所以这是我的问题,因为一些在线评判网站同时运行多个测试程序,它们如何实现性能隔离?他们如何在另一个时间运行的同一个程序上实现相同的运行时间?
我认为像“VMware”或“Sandbox”这样的孤立环境流程总会返回相同的结果。它是否正确?以及如何实现这些事情的任何想法?
当前解决方案
我正在使用docker进行沙盒处理。这是一种简单而且最安全的方式。
答案 0 :(得分:1)
不幸的是,即使在专用机器上与VM相比,实际上也很难保证一致的运行时间。如果您确实希望像上面提到的那样实现这样的东西,那么您可能希望VM保留所有将运行沙盒的代码。通常你不想为每个核心提供超过几个请求的服务,所以我想对于内存和cpu绑定使用的算法,每个物理核心最多2个VM。
虽然我只能推测为什么不为每个核心尝试不同数量的虚拟机,看看它是如何运行的。尝试瞄准大约90%或更高的SLO合规率(如果你真的需要,则为98-99),你应该没问题。再次很难告诉你到底要做什么,因为很多这些事情只需要测试它并看看它是如何做的。
答案 1 :(得分:0)
可能过于简单化,取决于您不在问题中的其他要求,但是;
如果算法受CPU限制,只需在隔离的VM(或FreeBSD jail,或......)中运行它,并使用内置的操作系统工具将是最简单的。
(可以像在unix中使用'time'命令一样简单,并使用“limit”设置内存限制)