執行緒,程序
首先我們要理解執行緒是在程序中執行的,也可以說一個執行緒必須要有一個裝載它的程序。 而一個程序中至少有一個執行緒在執行。
一個執行緒可以建立和撤銷另一個執行緒,同一個程序中的多個執行緒之間可以併發執行。
多執行緒就是一個程序中有多個執行緒在執行。那麼有什麼好處,為什麼不做成多程序呢?解釋:伺服器開闢一個執行緒所消耗的資源遠遠小於開闢一個程序所消耗的資源。且維護程序的資源成本高於維護一個執行緒的資源成本。而程式中的程式碼就是由執行緒去執行的(php程式碼該執行緒得編譯一次再執行,java直接執行位元組碼)
我們經常聽到的apache、nginx、tomcat 都支援多執行緒開發。多執行緒模式可以支援更高的網站迸發。
在http協議和https協議中我們可以在request中看到Connection:keep-alive 意思是長連線,既是保持該連線在一定時間內不會斷開(你可以在伺服器軟體nginx、apache等軟體中調校keep-alive的有效時間,或者是等待客戶端的主動關閉請求,詳情檢視http協議)。在不會斷開的時間內其實就是伺服器那邊一直在維護你的執行緒,沒有斷開這個執行緒。當你在一定時間內沒有再次請求傳送到該伺服器,那麼伺服器就會登出掉這個執行緒釋放伺服器資源。
如果有時網站崩潰了,你可以檢查一下監控time_wait的值是否過高,如果高了說明在這個時段伺服器維護的執行緒(keep-alive的長連線)是比較多的。
程序是具有一定獨立功能的程式關於某個資料集合上的一次執行活動,程序是系統進行資源分配和排程的一個獨立單位。
執行緒是程序的一個實體, 是CPU排程和分派的基本單位,它是比程序更小的能獨立執行的基本單位.執行緒自己基本上不擁有系統資源,只擁有一點在執行中必不可少的資源(如程式計數器,一組暫存器和棧),但是它可與同屬一個程序的其他的執行緒共享程序所擁有的全部資源。
程序和執行緒的主要差別在於它們是不同的作業系統資源管理方式。程序有獨立的地址空間,一個程序崩潰後,在保護模式下不會對其它程序產生影響,而執行緒只是一個程序中的不同執行路徑。執行緒有自己的堆疊和區域性變數,但執行緒之間沒有單獨的地址空間,一個執行緒死掉就等於整個程序死掉,所以多程序的程式要比多執行緒的程式 健壯,但在程序切換時,耗費資源較大,效率要差一些。但對於一些要求同時進行並且又要共享某些變數的併發操作,只能用執行緒,不能用程序。