面試題:在Win32環境中線程有3中基本模式,分別是什么?他們的關系和各自的優缺點是什么?
答案:3種基本模式分別為單線程、單元線程和自由線程
1.單線程:簡單的應用程序很可能是單線應用程序,僅包含與應用程序進程對應的線程。進程可以被定義為應用程序的實例,擁有該應用程序的內存空間。大多數Windows應用程序都是單線程的,即用一個線程完成所有的工作。
2.單元線程:單元線程是一種稍微復雜的線程模式。標記用于單元線程的代碼可以在其自己的線程中執行,并限制在自己的單元中。線程可以被定義為進程所擁有的實體,處理時將調度該進程。在單元線程中,所有的線程都在主應用程序內存中各自的子段范圍內運行。此模式允許多個代碼實例同時但獨立地運行。
3.自由線程:自由線程是非常復雜的線程模式。在自由線程模式中,多個線程可以同時調用相同的方法和組件。與單元線程不同,自由線程不會被限制在獨立的內存空間。當應用程序必須進行大量相似而又獨立的數學計算時,你可以需要使用自由線程。在這種情況下,你需要生成多個線程使用相同的代碼示例來執行計算。可能C++開發人員是僅有的編寫過自由線程應用程序的應用程序開發人員,因為像Visual Basic6.0這樣的語言幾乎不可能編寫自由線程應用程序。
知識拓展:在Win32環境中,線程有3種基本模式,單線程、單元線程和自由線程。
為了對線程模式有一定的了解,可以將其想象為從一間屋子搬運物品到另一間屋子。如果采用單線程方法,則需要自己完成打包到扛箱子,再到拆包的所有工作。如果使用單元線程模式,則表示邀請了好朋友來幫忙,每個朋友在一個單獨的房間里工作,并且不能幫助其他在房間工作的人,他們各自負責自己的空間和空間內的物品搬運。如果采用自由線程方法,仍然邀請相同的朋友來幫忙,但是所有的朋友可以隨時在任何一個房間工作,共同打包物品,與此類似,房子就是運行所有線程的進程,每個朋友都是一個代碼實例,搬運的物品為應用程序的資源和變量。
不同線程模式有自己的優點和缺點。單元線程比單線程要快,因為有多個組件實例在工作。在某些情況下,自由線程比單線程更快、更有效、這是因為所有的事情同時發生,并且共享所有的資源。但是,當多線程更改共享資源時,這可能會出現問題。假設一個人開始使用箱子打包廚房用具,此時另一個朋友進來了,要使用同一個箱子打包浴室的東西。第一個朋友在箱子上貼上了“廚房用具”標簽,另一個朋友用“洗漱用品”標簽覆蓋了原標簽。結果,當你拆包時,就會發生將廚房用品搬到浴室的情況。