javascript筆記,NodeJs隨筆

 2023-10-21 阅读 27 评论 0

摘要:什么是線程?(引用學習-前端改變世界)https://www.cnblogs.com/kevin9103/p/5053517.html#4225442 我們引用官方的解釋:線程可以獨立運行的最小的CPU單位,可以在同一個進程里并發運行,共享該進程下的內存地址空間(注意這個特

什么是線程?(引用學習-前端改變世界)https://www.cnblogs.com/kevin9103/p/5053517.html#4225442

我們引用官方的解釋:線程可以獨立運行的最小的CPU單位,可以在同一個進程里并發運行,共享該進程下的內存地址空間(注意這個特點)。

我們可以看到同一個進程下的線程是會共享相同的文件和內存的(內存地址空間),所以大家可以想象,當不同的線程需要占用同一個變量時,根據先到先得的原則,先到的線程在運作時,后來的線程只能在旁邊等待,也就是加入到了阻塞排隊序列。所以這就是造成線程阻塞的原因。

因此,雖說進程可以支持多個線程,它們看似同時執行,但互相之間并不同步。一個進程中的多個線程共享相同的內存地址空間,這就意味著它們可以訪問相同的變量和對象,而且它們從同一堆中分配對象。盡管這讓線程之間共享信息變得更容易,因為程序設計者必須小心,確保它們不會妨礙同一進程里的其它線程。
了解了多線程并行的缺陷后,我們就可以更好地理解NodeJS的強大所在了。因為NodeJS是異步單線程的!
2. NodeJS的異步I/O原理
我們先來看一段Apache請求數據庫的代碼:
代碼執行到第一行的時候線程會阻塞,等待query返回結果,然后繼續處理。由于數據庫查詢、磁盤讀寫、網絡通信等原因(所謂的I/O)阻塞時間會非常大(相對于CPU始終頻率)。對于高并發的訪問,一方面線程長期阻塞等待,另一方面為了應付新情求而不斷添加新線程,會浪費大量系統資源,同時線程的增加也會也會占用大量的CPU時間來處理內存上下文切換。看看node.js怎么處理。
看到沒,就四個字:異步回調。query的第二個參數是一個回調函數,進程執行到db.query的時候不會等待結果返回,而是直接繼續執行下面的語句,直到進入事件循環。當數據庫執行結果返回的時候會將事件發送到事件隊列,等到線程進入事件循環后才會調用之前的回調函數。更專業的說法是異步I/O。只要單線程就可以。

轉載于:https://www.cnblogs.com/hr-cmbc/p/10899168.html

版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。

原文链接:https://hbdhgg.com/5/154463.html

发表评论:

本站为非赢利网站,部分文章来源或改编自互联网及其他公众平台,主要目的在于分享信息,版权归原作者所有,内容仅供读者参考,如有侵权请联系我们删除!

Copyright © 2022 匯編語言學習筆記 Inc. 保留所有权利。

底部版权信息