假设我有一个函数可以通过生成多个进程来完成一些工作。我想比较CPU时间与此功能所用的实际时间。
def test do
prev_real = System.monotonic_time(:millisecond)
# Code to complete some task
# Spawn different processes & give each process some task
# Receive result
# Finish task
current_real = System.monotonic_time(:millisecond)
diff_real = current_real - prev_real
IO.puts "Real time " <> to_string(diff_real)
IO.puts "CPU time ?????"
end
如何计算给定函数所需的CPU时间?我有兴趣计算CPU时间/实时比率。
答案 0 :(得分:3)
如果您只是尝试分析代码而不是实现自己的分析框架,我建议使用现有的工具,如:
fprof
,它会为您提供有关在功能上花费的时间(真实和自己的)的信息percept
,它将为您提供有关系统软件中任何特定时间工作的信息以及xprof
旨在帮助您找到对您的函数的哪些调用将导致它花费更多时间(触发低效的代码分支)。他们利用erlang:trace
来确定正在执行哪个函数以及erlang:system_profile
与runnable_procs
一起确定哪些函数正在运行。您可以启动一个功能,点击接收或重新安排重新安排,等待而不做任何实际工作。将这两者结合起来可能很复杂,我建议在尝试将自己的工具粘合在一起之前使用已有的工具。