好吧,对于我的编程任务(是的,我们都可以转向我们认为适合帮助的任何源)我必须找出进程花费阻塞/休眠/运行的时间.
我的第一次尝试是创建一个bash脚本......看起来像这样:
for i in `ls /proc/ | egrep [0-9]+`
do
cat /proc/$i/status | grep State
done
Run Code Online (Sandbox Code Playgroud)
但后来所有问题都报告了睡眠状态.加上这种方法需要我疯狂地进行调查......所以运行测试可能会改变结果......(呃)
现在用syscalls编译新版本的linux或者跟踪进程状态的方法并不是不可能的.我唯一担心的是试图找出如何跟踪不断变化的过程状态,并确保我不会错过任何东西......
我认为我的程序正在跳过JSON调用的结果.是否可以在此处创建闭包函数或使程序等待JSON调用返回?
function username_not_duplicate(username) {
var function_name = "get_username";
var parameters = [username];
var url = "/get_functions.php?function_name=" + function_name + "¶meters=" + parameters;
$.getJSON(url, function(user_name) {
if (user_name == true) {
return true;
}
});
return false;
}
Run Code Online (Sandbox Code Playgroud) 我刚刚查看了JavaScript Timing Events,其中显示“第二个参数指示从现在开始多少毫秒后您要执行第一个参数。 ”
现在,我知道在 JavaScript 中,浮点和整数都是 类型Number,因此从语法上讲,我可以输入浮点值,例如 ' setTimeout("javascript statement",4.5);' - 但是,JavaScript 是否会尝试在那里创建 4.5 毫秒的延迟?或者它会自动截断为整数并继续?
预先感谢您的任何答复,
干杯!
我有一个多线程应用程序,在某段代码中我用a Stopwatch来衡量一个操作的时间:
MatchCollection matches = regex.Matches(text); //lazy evaluation
Int32 matchCount;
//inside this bracket program should not context switch
{
//start timer
MyStopwatch matchDuration = MyStopwatch.StartNew();
//actually evaluate regex
matchCount = matches.Count;
//adds the time regex took to a list
durations.AddDuration(matchDuration.Stop());
}
Run Code Online (Sandbox Code Playgroud)
现在,问题是如果程序在秒表启动时将控制切换到另一个其他线程,那么定时持续时间将是错误的.在上下文切换回此部分之前,另一个线程可以完成任何工作量.
请注意,我不是在询问锁定,这些都是局部变量,因此不需要这样做.我只想让定时部分连续执行.
编辑:另一个解决方案可能是减去上下文切换时间,以获得在定时部分完成工作的实际时间.不知道是否可能.
我最近开始更详细地探索 Javascript 以及它如何在浏览器中执行。具体来说就是setTimeout函数。
我的理解是调用setTimeout(foo,x)
将传递一个句柄到 foo 以在 x 毫秒后执行。这个时间安排的可靠性如何?显然,如果另一个长时间运行的脚本在 x 毫秒后仍在执行,那么浏览器将无法调用 foo,但我可以绝对确定该脚本setTimeout(foo,101)将始终在 x 毫秒后执行setTimeout(foo,100)吗?
我有一个线程每40毫秒(25赫兹)生成一个网络数据包,它是一个无限循环(直到被告知停止),我正在使用thread.sleep.
当我构建数据包时,其中一个值是当前的GPS时间,使用DateTime.UtcNow并添加闰秒.
这在我开始时工作正常,但随着时间的推移漂移,大约2小时后,它落后了5秒.
我有一个Symmetrom GPS时间服务器,我正在使用他们的软件作为NTP客户端,它说PC上的累积漂移大约是1.2秒(我注意到的大多数是在PC关闭而不同步时漂移到NTP).
任何人都知道什么是错的?我知道thread.sleep不是完美的计时,而Windows不是RTOS,但漂移没有意义,丢帧会.
由于一些专有和ITAR问题,我无法发布代码,但我可以发布一个粗略的大纲:
while(!abort) {
currentTime = DateTime.UtcNow + leapSeconds ;
buildPacket(currentTime);
stream.Write(msg, 0, sendSize);
//NetworkStream Thread.Sleep(40);
}
Run Code Online (Sandbox Code Playgroud)
我在Windows 7并使用Visual Studios 2010.
当我单独运行我的"网络研讨会"规格时,它们似乎总是过去,但如果我尝试整个套件,它只能通过其中一项测试,大约50%或者时间.我每次使用相同的种子测试它,看它是否与执行测试的顺序有关.
如果我通过在它的中间睡一觉来减慢我的测试,那么它再次神奇地开始100%通过.显然,我不想依赖这样的弱工作,想要弄清楚如何真正解决我的问题.需要"spec_helper"
require "spec_helper"
describe "ProgramManager::Webinars" do
let(:program) { create(:program) }
let(:superuser) { create(:superuser) }
describe "#index" do
before { login_as(superuser) }
let(:delete) { 'Delete' }
it "displays an edit and destroy link for all webinars" do
w1, w2, w3 = create(:webinar, program: program), create(:webinar, program: program), create(:webinar, program: program)
visit program_webinars_path(program)
[w1, w2, w3].each do |webinar|
expect(page).to have_link webinar.name, href: edit_program_webinar_path(program, webinar)
expect(page).to have_link '', href: destroy_warnings_program_webinar_path(program, webinar)
end
end
it "has a link to create a new webinar" …Run Code Online (Sandbox Code Playgroud) 我想知道我们是否可以使用node.js来衡量完成http请求所需的时间.从文档(这里)稍微修改一个例子,可以很容易地写下以下代码.
var http = require('http');
var stamp1 = new Date();
var stamp2, stamp3, stamp4;
var options = {
hostname: 'www.google.com',
port: 80,
path: '/upload',
method: 'POST'
};
var req = http.request(options, function(res) {
stamp3 = new Date();
console.log('STATUS: ' + res.statusCode);
console.log('HEADERS: ' + JSON.stringify(res.headers));
res.setEncoding('utf8');
res.on('data', function (chunk) {
console.log('BODY: ' + chunk);
});
res.on('end', function () {
stamp4 = new Date();
console.log ("Stamp 3: " + stamp3);
console.log ("Stamp 4: " + stamp4);
});
});
req.on('error', …Run Code Online (Sandbox Code Playgroud)我在RenderScript中实现了一个小型CNN,并希望在不同硬件上分析性能.在我的Nexus 7上,时间是有意义的,但在NVIDIA Shield上他们没有.
CNN(LeNet)以驻留在队列中的9层实现,计算按顺序执行.每个层都是单独计时的.
这是一个例子:
conv1 pool1 conv2 pool2 resh1 ip1 relu1 ip2 softmax
nexus7 11.177 7.813 13.357 8.367 8.097 2.1 0.326 1.557 2.667
shield 13.219 1.024 1.567 1.081 0.988 14.588 13.323 14.318 40.347
Run Code Online (Sandbox Code Playgroud)
时间的分布对于nexus来说是正确的,其中conv1和conv2(卷积层)占用大部分时间.但是在盾牌上,时间下降的方式超出了2-4层的合理范围,并且似乎朝着最后的方向聚集起来.softmax层是一个相对较小的工作,因此40ms太大了.我的计时方法必须是错误的,或者正在发生其他事情.
运行图层的代码如下所示:
double[] times = new double[layers.size()];
int layerindex = 0;
for (Layer a : layers) {
double t = SystemClock.elapsedRealtime();
//long t = System.currentTimeMillis(); // makes no difference
blob = a.forward(blob); // here we call renderscript forEach_(), invoke_() etc
//mRS.finish(); // makes no difference
t …Run Code Online (Sandbox Code Playgroud) timing ×10
javascript ×3
c# ×2
performance ×2
.net ×1
android ×1
c ×1
clion ×1
http-request ×1
jquery ×1
json ×1
linux ×1
linux-kernel ×1
node.js ×1
renderscript ×1
rspec ×1
scheduling ×1
settimeout ×1
sleep ×1