回覆列表
  • 1 # 使用者1415180428147

    linux下執行緒的實現,linux的執行緒程式設計有兩個庫pthread和pth,對於pthread的實現是核心方式的實現,每個執行緒在kernel中都有task結構與之對應,也就是說用ps命令列是可以看見多個執行緒,執行緒的排程也是由核心中的schedule進行的。

    再來看看Windows的多執行緒,Windows NT和Windows95是一個搶先型多工、多執行緒作業系統。因為它使用搶先型的多工,所以它擁有與UNIX同樣平滑的處理和程序獨立。多執行緒就更進一步。一個獨立的程式預設是使用一個執行緒,不過它可以將自己分解為幾個獨立的執行緒來執行,例如,其中的一個執行緒可以傳送一個檔案到印表機,而另一個可以響應使用者的輸入。這個簡單的程式設計修改可以明顯減少使用者等待的時間,讓使用者無需擔心長時間的計算、重繪螢幕、檔案讀寫等帶來的不便。

    多執行緒還可以讓你從許多高階的多處理器NT機器中得到好處。例如,你購買了一個高階的RISC機器,可以使用多達10個CPU晶片,但在開始的時候你只購買了一個CPU。你寫了一個簡單的Mandelbrot set程式,你發現需要15秒的時間來重新繪製Mandelbrot set的畫面。

    那麼,Windows平臺的執行緒和類Unix平臺(包括Linux)的程序的區別是什麼呢?

    熟悉WIN32程式設計的人一定知道,WIN32的程序管理方式與UNIX上有著很大區別,在UNIX裡,只有程序的概念,但在WIN32裡卻還有一個“執行緒”的概念,那麼UNIX和WIN32在這裡究竟有著什麼區別呢?

    UNIX裡的fork是七十年代UNIX早期的開發者經過長期在理論和實踐上的艱苦探索後取得的成果,一方面,它使作業系統在程序管理上付出了最小的代價,另一方面,又為程式設計師提供了一個簡潔明瞭的多程序方法。

    WIN32裡的程序/執行緒是繼承自OS/2的。在WIN32裡,“程序”是指一個程式,而“執行緒”是一個“程序”裡的一個執行“線索”。從核心上講,WIN32的多程序與UNIX並無多大的區別,在WIN32裡的執行緒才相當於UNIX的程序,是一個實際正在執行的程式碼。但是,WIN32裡同一個程序裡各個執行緒之間是共享資料段的。這才是與UNIX的程序最大的不同。

    對於多工系統,共享資料區是必要的,但也是一個容易引起混亂的問題,在WIN32下,一個程式設計師很容易忘記執行緒之間的資料是共享的這一情況,一個執行緒修改過一個變數後,另一個執行緒卻又修改了它,結果引起程式出問題。但在UNIX下,由於變數本來並不共享,而由程式設計師來顯式地指定要共享的資料,使程式變得更清晰與安全。

  • 中秋節和大豐收的關聯?
  • 如何看待丁雨彥航在NBA的發展?