前端提升(10)之線程和進程得區別+ eval是做什麼的+哪些操作會造成內存泄漏

導航

在這裏插入圖片描述

1、線程和進程得區別

舉個例子:電腦上開了兩個瀏覽器,一個火狐,一個谷歌。那麼這就是兩個進程,每個瀏覽器裏面可以開很多網頁,把一個網頁當做一個線程就好理解多了。

進程和線程的區別:
1.進程是擁有資源的最小單位;線程是調度的最小單位。
2.進程擁有自己獨立的地址空間,每啓動一個進程,系統會爲其配地址空間,建立數據來維護代碼段、堆棧段、數據段;線程沒有獨立的空間地址,它使用相同的地址空間共享數據。
3.CPU切換一個線程比一個進程花費小。
4.創建一個線程比一個進程開銷小。
5.線程佔用的資源比進程少很多。
6.線程之間通信更方便,同一進程下,線程共享全局變量、靜態變量等數據。
7.多進程程序更加安全、生命力更強,一個進程死掉不會影響另一個進程(它擁有獨立地址空間);多線程程序不易維護,一個線程死掉,整個線程就結束了(共享地址空間)。
8.進程保護要求高,開銷大,效率相對較低;線程效率就比較高,可以頻繁切換。

進程與線程的同步:
進程:無名管道、有名管道、信號、共享內存、消息隊列、信號量。
線程:互斥量、讀寫鎖、線程信號、條件變量。

參考:https://blog.csdn.net/jxpOoO/article/details/94431446

我願意作爲你的進程,給你我所有的內存空間和全局的可使用數據。

2、 eval是做什麼的?

這個很簡單,它就是把字符串轉成js代碼執行,並返回執行結果,開發不常用,一般用於木馬或者其他的搞破壞中吧。

console.log(eval('1+2')) // 3 注意1+2是字符串

console.log(eval(‘我愛你’)) // 男人的嘴,盛開的花蕊

3、哪些操作會造成內存泄漏

內存泄漏指任何對象在您不再擁有或需要它之後仍然存在。

垃圾回收器定期掃描對象,並計算引用了每個對象的其他對象的數量。如果一個對象的引用數量爲 0(沒
有其他對象引用過該對象),或對該對象的惟一引用是循環的,那麼該對象的內存即可回收。

  1. setTimeout 的第一個參數使用字符串而非函數的話,會引發內存泄漏。
  2. 閉包
  3. 控制檯日誌
  4. 循環(在兩個對象彼此引用且彼此保留時,就會產生一個循環)
function like () {
  var who = 'you'
  function love () {
    console.log("Who's my lover? " + who)
  }
  love()
}
like() // Who's my lover? you
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章