Khi sử dụng javascript, tôi nhận thấy điều này. Bạn có thể sử dụngHành vi này của setInterval có ngụ ý hành vi đa luồng trong Javascript không?
var i=0;
var startingTime=new Date().getTime();
setInterval("foo()",1);
function foo() {
i+=1;
if ($("#foodiv").text()==i) {
//we detected a doubled value (parallel execution)
$("#repdiv").append("[repetition on "+i+"]");
}
$("#foodiv").html(i);
$("#timediv").html(Math.floor((new Date().getTime()-startingTime)/1000));
}
nhưng khi tôi đọc và tự thử thời gian không phải là 1ms, ít nhất là 10ms hoặc gì đó. Trong thực tế sau 10 giây, tôi có một giá trị của tôi khoảng 2300/2400, và không phải là 10000 như mong đợi.
Đây là yếu tố thời gian tối thiểu có thể cho quy trình ??? Chắc chắn là không. Nếu tôi thử điều này:
<html><head>
<script language="javascript" type="text/javascript" src="jquery-1.4.min.js"></script>
<script type="text/javascript">
var i=0;
var startingTime=new Date().getTime();
setInterval("foo()",1);setInterval("foo()",1);setInterval("foo()",1);
setInterval("foo()",1);setInterval("foo()",1);setInterval("foo()",1);
setInterval("foo()",1);setInterval("foo()",1);setInterval("foo()",1);
setInterval("foo()",1);setInterval("foo()",1);setInterval("foo()",1);
setInterval("foo()",1);setInterval("foo()",1);setInterval("foo()",1);
setInterval("foo()",1);setInterval("foo()",1);setInterval("foo()",1);
setInterval("foo()",1);setInterval("foo()",1);setInterval("foo()",1);
setInterval("foo()",1);setInterval("foo()",1);setInterval("foo()",1);
function foo() {
i+=1;
if ($("#foodiv").text()==i) {
//we detected a doubled value (parallel execution)
$("#repdiv").append("[repetition on "+i+"]");
}
$("#foodiv").html(i);
$("#timediv").html(Math.floor((new Date().getTime()-startingTime)/1000));
}
</script>
</head>
<body>
<div id="foodiv"></div> (counter)
<br/>
<div id="timediv"></div> (seconds passed)
<br/>
<div id="repdiv"></div>
<br/>
</body>
</html>
Bộ đếm sẽ rất nhanh và sau 10 giây, tôi có giá trị là 12000 !!!! Đó là cho tôi là không thể giải thích, bởi vì cuộc gọi không được thực hiện song song (hoặc ít nhất chúng tôi có thể có một số giá trị đọc gấp đôi của tôi cho các cuộc gọi khác nhau, tìm trong div repdiv).
Ai đó có thể giải thích cho tôi điều đó không? Tôi biết CPU là rất nhấn mạnh bởi tất cả những cuộc gọi, nhưng ít nhất nó tăng tốc độ những điều đáng ngạc nhiên.
Tôi đọc tất cả câu trả lời của bạn và các nhiệm vụ khác trong diễn đàn và họ đã xác nhận suy nghĩ của tôi. Nhưng câu hỏi thực sự là tại sao! Tại sao họ đặt giới hạn thành 15ms khi tôi có thể thực hiện nhiều cuộc gọi tuần tự có thời gian thấp hơn nhiều? Tôi chắc chắn rằng hệ thống gọi lại nhiều này không phải là thực hành tốt, nhưng tôi có thể làm điều đó, và tôi có khả năng có thể bão hòa tải CPU.
Tôi không thấy mã này hoạt động như thế nào, khoảng thời gian thiết lập lấy hàm làm đối số đầu tiên, không phải foo(), nó sẽ phải giống như setInterval (foo, 1). Ngoài ra bạn đang thiếu một số kết thúc) sau khi của bạn nếu và nối thêm –
Ngoài ra, giả sử mã là chính xác, các giá trị có vẻ sai. Với 12 giờ, bộ đếm sẽ chỉ nhanh hơn 12 lần, vì vậy 600 sẽ trở thành 7200, không phải 150000. Một cái gì đó nói với tôi rằng đây không phải là mã mà OP đã kiểm tra. – casablanca
bạn nói đúng, tôi đã chỉnh sửa mã nhiều lần và tạo lại nó ở nhà, nhưng khái niệm này không thay đổi. Tôi sẽ lặp lại những thứ như tôi đã làm một cách hiệu quả. Ngoài ra nếu bạn nhận thấy tôi bỏ qua mã html, và điều đó làm cho mọi thứ tồi tệ nhất nếu bạn cố gắng này như nó được. – mizar