面试题:在Win32环境中线程有3中基本模式,分别是什么?他们的关系和各自的优缺点是什么?
答案:3种基本模式分别为单线程、单元线程和自由线程
1.单线程:简单的应用程序很可能是单线应用程序,仅包含与应用程序进程对应的线程。进程可以被定义为应用程序的实例,拥有该应用程序的内存空间。大多数Windows应用程序都是单线程的,即用一个线程完成所有的工作。
2.单元线程:单元线程是一种稍微复杂的线程模式。标记用于单元线程的代码可以在其自己的线程中执行,并限制在自己的单元中。线程可以被定义为进程所拥有的实体,处理时将调度该进程。在单元线程中,所有的线程都在主应用程序内存中各自的子段范围内运行。此模式允许多个代码实例同时但独立地运行。
3.自由线程:自由线程是非常复杂的线程模式。在自由线程模式中,多个线程可以同时调用相同的方法和组件。与单元线程不同,自由线程不会被限制在独立的内存空间。当应用程序必须进行大量相似而又独立的数学计算时,你可以需要使用自由线程。在这种情况下,你需要生成多个线程使用相同的代码示例来执行计算。可能C++开发人员是仅有的编写过自由线程应用程序的应用程序开发人员,因为像Visual Basic6.0这样的语言几乎不可能编写自由线程应用程序。
知识拓展:在Win32环境中,线程有3种基本模式,单线程、单元线程和自由线程。
为了对线程模式有一定的了解,可以将其想象为从一间屋子搬运物品到另一间屋子。如果采用单线程方法,则需要自己完成打包到扛箱子,再到拆包的所有工作。如果使用单元线程模式,则表示邀请了好朋友来帮忙,每个朋友在一个单独的房间里工作,并且不能帮助其他在房间工作的人,他们各自负责自己的空间和空间内的物品搬运。如果采用自由线程方法,仍然邀请相同的朋友来帮忙,但是所有的朋友可以随时在任何一个房间工作,共同打包物品,与此类似,房子就是运行所有线程的进程,每个朋友都是一个代码实例,搬运的物品为应用程序的资源和变量。
不同线程模式有自己的优点和缺点。单元线程比单线程要快,因为有多个组件实例在工作。在某些情况下,自由线程比单线程更快、更有效、这是因为所有的事情同时发生,并且共享所有的资源。但是,当多线程更改共享资源时,这可能会出现问题。假设一个人开始使用箱子打包厨房用具,此时另一个朋友进来了,要使用同一个箱子打包浴室的东西。第一个朋友在箱子上贴上了“厨房用具”标签,另一个朋友用“洗漱用品”标签覆盖了原标签。结果,当你拆包时,就会发生将厨房用品搬到浴室的情况。