一.定義
進程:具有獨立功能的程序在某個數據集合上執行一次的過程。
線程:是進程內一個執行實體或執行單元。 比進程更小的能獨立運行的基本單位,是操作系統能夠進行運算調度的最小單位。
協程:本質上是一種控制抽象,簡潔優雅的實現一些控制行為,在協程中,控制行為可從當前執行上下文跳轉到程序其他位置,並且可以在之后任意時刻恢復當前執行上下文,從跳出點繼續執行。
二.區別與聯系
1.進程和線程的區別和聯系
進程:啟動進程,系統會為進程分配一個獨立的地址空間, 各個進程之間相互不影響,一個進程結束不會影響另外一個進程。
線程:線程是在進程下運行的,一個進程可以包含多個線程,線程是共享進程中的數據,使用相同的地址空間,同一進程下並發的線程可以共享數據。一個線程死掉,整個進程死掉(linux中SIGSEGV),一個進程死掉,不會對別的進程造成影響。
2.多線程和多協程的區別和聯系
多線程,是指從軟件或者硬件上實現多個線程並發執行的技術。具有多線程能力的計算機因有硬件支持而能夠在同一時間執行多於一個線程,進而提升整體處理性能。
簡單來說:線程是程序中一個單一的順序控制流程;而多線程就是在單個程序中同時運行多個線程來完成不同的工作。
多線程是為了同步完成多項任務,不是為了提高運行效率,而是為了提高資源使用效率來提高系統的效率。多線程是在同一時間需要完成多項任務的時候實現的。
協程:獨立的棧空間,共享堆空間,調度由用戶自己控制,本質上有點類似於用戶級線程,這些用戶級線程的調度也是自己實現的。
一個主線程中多個協程相互協作,完成調度,比如子程序A讀取數據庫數據,此時cpu等待結果,就協程內部切換到執行函數B,過段時間再返回A,接受結果進行下一步,這就是協程,減小了內存開銷。
多線程的優缺點
優點:
1)、多線程技術可以加快程序的運行速度,使程序的響應速度更快,因為用戶界面可以在進行其它工作的同時一直處於活動狀態
2)、可以把占據長時間的程序中的任務放到后台去處理,同時執行其他操作,提高效率
3)、當前沒有進行處理的任務時可以將處理器時間讓給其它任務
4)、可以讓同一個程序的不同部分並發執行,釋放一些珍貴的資源如內存占用等等
5)、可以隨時停止任務
6)、可以分別設置各個任務的優先級以優化性能
缺點:
1)、因為多線程需要開辟內存,而且線程切換需要時間因此會很消耗系統內存。
2)、線程的終止會對程序產生影響
3)、由於多個線程之間存在共享數據,因此容易出現線程死鎖的情況
4)、對線程進行管理要求額外的 CPU開銷。線程的使用會給系統帶來上下文切換的額外負擔。
線程和協程的總結
線程切換:假設cpu處理時間無限重,直接用時鍾中斷打斷運算切走(保證別的應用也在正常運行)
協程切換:io所需的時間無限長,而cpu處理時間無限快,函數在io請求的時候,將cpu切走去處理別的數據