JavaScript Tour-terminal: the confused settimeout

Source: Internet
Author: User

Original: JavaScript Tour-terminal: the confused settimeout

  

Sometimes the end is not very good, but at least it is a kind of ending, this series of the last article settimeout, this is a confusing function, but also I have been in the slot JS

Reason, we do not see the source code JS, Setimeout also, from the beginning to the end is the use of black boxes.

A: settimeout single-threaded query?

All the textbooks are saying that JS is a single-threaded model, and that settimeout's execution function is dropped to JS's internal execution queue, which also includes the Onlick event and some XHR callback functions.

At first glance seems to be such a matter, since to queue up, that must be the principle of FIFO, who can not guarantee accurate timing trigger, even if the exact trigger, there is no guarantee in the execution queue

Execute immediately, because to queue, if I set the 5s trigger, so the time must be above 5s, the problem is here, this 5s trigger mechanism is what??? Who can tell me

???? since JS is single-threaded, is JS going to keep rotation "execution queue"? Q Execute function 5s is it time? 5s is it time??? I don't think JS would be so stupid.

Do this "spin" operation, because if I set the trigger time to 1 years? Does it have to spin for 1 years??? And this pull mode is quite CPU-intensive, in order to save as much as possible

CPU time, will there be other threads to assist Setttimeout to do this 5s mechanism? Then 5s time to push the execution function in Setimeout into JS's internal execution queue?

What kind of a reasonable way would it be?

Second: Find inspiration in System.Threading.Timer

Because Setimeout closed source, I do not see settimeout inside exactly how to do 5s trigger mechanism, very sorry, I can only find similar language in the timer mechanism, fortunately in C #

Also has such a timer, see if can find some inspiration, then I will probably read the following source:

1         Static void Main (string[] args)2        {3             new""0  1//30s4 5             Console.read (); 6         }

Through the dazzling search, finally understand that the original timer is only a Win32 in the Createappdomaintimer function of the package, really their pit goods, first let you see the real.

One of the duetime is the period parameter in my timer constructor, which is 30s, and then periodically triggers the Appdomaintimercallback function, a logical call

The fire method triggers our callcallback function.

In fact, we see the source code, found that the timer timer is actually a fake, just encapsulated the WIN32 function, and also did not do completely 30s, this is because callback () is in the call

After the Appdomaintimercallback function is triggered, these logic also takes time, including the error of the Win32 callback, what is the inspiration now? since the multithreading of C # uses

The work thread goes to run all has the error, that your single-threaded settimeout and what can? Let's not talk about using the main thread to rotation settimeout this very unrealistic thing.

Three: The last bit of speculation

Through some understanding of the principle of the timer in C #, I think settimeout should be like this, the 5s mechanism should be dropped to the browser kernel thread, by the browser kernel thread to the real

now this 5s mechanism, if the 5s time, the kernel will plug function functions to JS "Internal execution queue", by the JS main thread idle time to execute. after all, the browser thread still has a lot

, such as the following IE9:

Well, not to mention, said more is also speculation, the outcome is not perfect, thank you for the continued attention to the JavaScript series, but also wish you all in the new year work smoothly ~ ~ ~

JavaScript Tour-terminal: the confused settimeout

Contact Us

The content source of this page is from Internet, which doesn't represent Alibaba Cloud's opinion; products and services mentioned on that page don't have any relationship with Alibaba Cloud. If the content of the page makes you feel confusing, please write us an email, we will handle the problem within 5 days after receiving your email.

If you find any instances of plagiarism from the community, please send an email to: info-contact@alibabacloud.com and provide relevant evidence. A staff member will contact you within 5 working days.

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.