[转贴]Threading Model |
上一篇:[电影]《美国最后一个处女》 下一篇:[转贴]编码,charset,乱码,unicode,utf-8与net简单释义 |
添加日期:2006/12/22 23:14:05 |
快速返回 返回列表 |
阅读13142次 |
体验.NET Multithreading的快感 --- 以VB.NET开发Thread Pool式网络芳邻扫瞄程序 作者: 李明儒 [截取片断]
Threading Model
谈到Multithreading,还是得介绍一下在Win32作业环境下的三种基本Threading Model: Single Threading、Apartment Threading、Free Threading。我引用一个搬家打包的比喻来让它们更容易被理解:
l Single Threading 大部分的Windows应用程序都属于这种模式。应用程序会以Process形式存在于系统中,拥有自己的内存空间,其中有一条Thread做完所有的工作。 好比你一个人负责所有的搬家打包工作,认命地带着纸箱、胶带、剪刀,一个房间一个房间的收拾、装箱。
l Apartment Threading 稍微复杂一点,若一段程序代码被标为Apartment Threading,则可以在同一时间有多个Thread执行这段Code。但是每个Thread都被关在一个称为Apartment的空间中。Thread所属的Process会指定一小段内存空间供Thread专用,所以虽然同时有多条Thread正在执行,却是彼此完全独立的。这就是在VB时代唯一可以建立的Multithreading模式。每个Apartment中只存在一条Thread的模式称为Single Threaded Apartment(STA),另外有一种Apartment中可存在多条Thread的MTA(Multi Threaded Apartment),但较不常见。 对应到搬家的例子,你打电话找来几个好朋友帮忙打包,但一个房间只由一个人负责,所以你需要多准备些纸箱、胶带与剪刀,大家也没法互相帮忙。但比起一个人蛮干,大家一起做的确速度快一些。
l Free Threading 最复杂但也是威力最强大的模式,多条Thread共处于相同的内存空间,可以同时呼叫某段函数、叫用某个对象,没有任何限制,拥有最大的弹性。但可以预见的,由于各Thread间需要同时存取某些资源或变量,彼此的干扰甚至可能导致可怕的灾难。在VB6时代,VB程序员倒不会有这种烦恼,因为VB6根本不支持Free Threading! 再一次,VB门徒的胸口又开始隐隐作痛… 再回到搬家的例子,你找来的几个好朋友中有三个是无话不说的姐妹淘,坚持一起帮你打包房间,三人可共享一组胶带与剪刀。由于三人可以分工合作,有人收书、有人收CD、有人收衣服,效率果然惊人。 合作固然愉快,但难免会有些小小的混乱,Teresa原本用来装CD的纸箱、被Audrey改标成装书、接着Joyce马上将手上的一堆书给塞进箱子里… 结果,你在三个月之后才找到心爱的”树技孤鸟”。
在.NET,.NET Framework提供了的Multithreading程序开发所需的基本类别,让所有的.NET开发人员能以较简便的方式开发出Multithreading的程序。由于此一支持特性属于.NET Framework而非特定的语言,对VB开发者的另一层意义是,迈向VB.NET之后,可以摆脱VB时代这样不行、那个没办法的魔咒,从此可以昂首 阔步,哇哈哈哈!!
|
|
评论 COMMENTS |
没有评论 No Comments. |
|