一、什么是多線程
· 在一個程序中,一些獨立運行的程序片斷叫作“線程”(Thread),利用它編程的概念就叫作“多線程處理”。
二、概念
· 多線程是為了同步完成多項任務,不是為了提高運行效率,而是為了提高資源使用效率來提高系統的效率。線程是在同一時間需要完成多項任務的時候實現的。
· 最簡單的比喻多線程就像火車的每一節車廂,而進程則是火車。車廂離開火車是無法跑動的,同理火車也不可能只有一節車廂。多線程的出現就是為了提高效率。同時它的出現也帶來了一些問題。
三、線程
· 每個正在系統上運行的程序都是一個進程。每個進程包含一到多個線程。進程也可能是整個程序或者是部分程序的動態執行。線程是一組指令的集合,或者是程序的特殊段,它可以在程序里獨立執行。也可以把它理解為代碼運行的上下文。所以線程基本上是輕量級的進程,它負責在單個程序里執行多任務。通常由操作系統負責多個線程的調度和執行。
· 線程是程序中一個單一的順序控制流程.在單個程序中同時運行多個線程完成不同的工作,稱為多線程.
· 線程和進程的區別在於,子進程和父進程有不同的代碼和數據空間,而多個線程則共享數據空間,每個線程有自己的執行堆棧和程序計數器為其執行上下文.多線程主要是為了節約CPU時間,發揮利用,根據具體情況而定. 線程的運行中需要使用計算機的內存資源和CPU。
四、好處
· 使用線程可以把占據時間長的程序中的任務放到后台去處理
· 用戶界面可以更加吸引人,這樣比如用戶點擊了一個按鈕去觸發某些事件的處理,可以彈出一個進度條來顯示處理的進度
· 程序的運行速度可能加快
· 在一些等待的任務實現上如用戶輸入、文件讀寫和網絡收發數據等,線程就比較有用了。在這種情況下可以釋放一些珍貴的資源如內存占用等等。
. 多線程技術在IOS軟件開發中也有舉足輕重的位置。
. 線程應用的好處還有很多,就不一一說明了
五、缺點
· 如果有大量的線程,會影響性能,因為操作系統需要在它們之間切換。
· 更多的線程需要更多的內存空間。
· 線程可能會給程序帶來更多“bug”,因此要小心使用。
· 線程的中止需要考慮其對程序運行的影響。
· 通常塊模型數據是在多個線程間共享的,需要防止線程死鎖情況的發生。
六、實際意義
· 一個采用了多線程技術的應用程序可以更好地利用系統資源。其主要優勢在於充分利用了CPU的空閑時間片,可以用盡可能少的時間來對用戶的要求做出響應,使得進程的整體運行效率得到較大提高,同時增強了應用程序的靈活性。更為重要的是,由於同一進程的所有線程是共享同一內存,所以不需要特殊的數據傳送機制,不需要建立共享存儲區或共享文件,從而使得不同任務之間的協調操作與運行、數據的交互、資源的分配等問題更加易於解決。
七、線程同步
· 在多線程應用中,考慮不同線程之間的數據同步和防止死鎖。當兩個或多個線程之間同時等待對方釋放資源的時候就會形成線程之間的死鎖。為了防止死鎖的發生,需要通過同步來實現線程安全。在Visual Basic中提供了三種方法來完成線程的同步。在Java中可用synchronized關鍵字。
八、PHP多線程原理、過程
1.主線程在適當的時候會創建子線程,子線程創建后需使用start()方法來啟動;
2.當子線程啟動后立即觸發run()方法,進入子線程工作任務運行區間,此區間的代碼段同主線程及其它子線程是並行同時運行的;
3.子線程在完成了各項的任務后,仍是存活狀態(空閑狀態),並沒有終結,它的各種狀態仍是可查的,它的各屬性仍可被訪問的,子線程是伴隨着整個進程的結束而結束;
4.若run()方法里遭遇手工執行了exit() die()等退出命令,或run()方法里遇程序報錯、拋出異常則會提前結束代碼段的執行,但當前子線程仍為存活狀態;
九、PHP多線程目前(pthreads V0.1.0)的不足
1.子線程間無法相互通訊;
2.子線程對象屬性類型目前只能為標量(整型、浮點型、字符型、布爾)和空(NULL),不支持復合數據類型(數組、對象)及資源類型;
3.若在子線程對象中實例化出另一個對象(如:對象A),那么在子線程內也只能訪問對象A中的標量屬性(其它的如數組類型屬性、對象類型屬性及資源類型屬性一律按空NULL對待)。
百度百科更多詳情: http://baike.baidu.com/link?url=KSFVp2zoqTXdbNo0Fj6N1rHzBPE5O9mqNiW_V4Ekbs3irvXddvDz2XlCaWWUstvp
http://cn2.php.net/manual/zh/book.pthreads.php
http://wenku.baidu.com/link?url=IZiELrTcqTg1n4BjfAhDU44NrNYfnjrreYogTE3pkvn67ts6xEslpcRvSz-XYQTP4aQW047nb-9qaSz5pGZlYFAHvsFpEOtsSliyixACVUi&pn=50
http://www.csdn.net/tag/pthreads
http://www.doc88.com/p-694922321313.html