多線程

一:進程可以簡單的理解爲一個可以獨立運行的程序單位。它是線程的集合,進程就是有一個或多個線程構成的,每一個線程都是進程中的一條執行路徑。

二:多線程就很容易理解:多線程就是指一個進程中同時有多個執行路徑(線程)正在執行。

三:爲什麼要是用多線程?

  1.在一個程序中,有很多的操作是非常耗時的,如數據庫讀寫操作,IO操作等,如果使用單線程,那麼程序就必須等待這些操作執行完成之後才能執行其他操作。使用多線程,可以在將耗時任務放在後臺繼續執行的同時,同時執行其他操作。

  2.可以提高程序的效率。

  3.在一些等待的任務上,如用戶輸入,文件讀取等,多線程就非常有用了。

缺點:

  1.使用太多線程,是很耗系統資源,因爲線程需要開闢內存。更多線程需要更多內存。

  2.影響系統性能,因爲操作系統需要在線程之間來回切換。

  3.需要考慮線程操作對程序的影響,如線程掛起,中止等操作對程序的影響。

  4.線程使用不當會發生很多問題。

  總結:多線程是異步的,但這不代表多線程真的是幾個線程是在同時進行,實際上是系統不斷地在各個線程之間來回的切換(因爲系統切換的速度非常的快,所以給我們在同時運行的錯覺)。

四:多線程的應用

多線程與高併發的聯繫。

  高併發:高併發指的是是一種系統運行過程中遇到的一種“短時間內遇到大量操作請求”的情況,主要發生在web系統集中大量訪問或者socket端口集中性收到大量請求(例如:12306的搶票情況;天貓雙十一活動)。該情況的發生會導致系統在這段時間內執行大量操作,例如對資源的請求,數據庫的操作等。如果高併發處理不好,不僅僅降低了用戶的體驗度(請求響應時間過長),同時可能導致系統宕機,嚴重的甚至導致OOM異常,系統停止工作等。如果要想系統能夠適應高併發狀態,則需要從各個方面進行系統優化,包括,硬件、網絡、系統架構、開發語言的選取、數據結構的運用、算法優化、數據庫優化……。

  而多線程只是在同/異步角度上解決高併發問題的其中的一個方法手段,是在同一時刻利用計算機閒置資源的一種方式。

  多線程在高併發問題中的作用就是充分利用計算機資源,使計算機的資源在每一時刻都能達到最大的利用率,不至於浪費計算機資源使其閒置。

 

????????????????????????????????????????????

進程切換比線程切換開銷大

進程切換:

1.切換頁表目錄以及使用新的地址空間

2.切換內核和硬件上下文。

線程上下文切換和進程上下文切換一個最主要的區別是線程切換虛擬內存空間仍然相同,但是進程是不同的。這兩種切換都是內核完成的,內核的切換的過程伴隨的最顯著的性能損耗是將寄存器中的內容切換出。

一旦虛擬地址發生變化,已經緩存的內存地址一瞬間都作廢了,所有東西都將會被刷新,這將導致內存訪問在一段時間內非常低效。線程切換不會存在這個問題。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章