[心缘地方]同学录
首页 | 功能说明 | 站长通知 | 最近更新 | 编码查看转换 | 代码下载 | 常见问题及讨论 | 《深入解析ASP核心技术》 | 王小鸭自动发工资条VBA版
登录系统:用户名: 密码: 如果要讨论问题,请先注册。

[转贴]Threading Model

上一篇:[电影]《美国最后一个处女》
下一篇:[转贴]编码,charset,乱码,unicode,utf-8与net简单释义

添加日期:2006/12/22 23:14:05 快速返回   返回列表 阅读13001次
体验.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.

添加评论 Add new comment.
昵称 Name:
评论内容 Comment:
验证码(不区分大小写)
Validation Code:
(not case sensitive)
看不清?点这里换一张!(Change it here!)
 
评论由管理员查看后才能显示。the comment will be showed after it is checked by admin.
CopyRight © 心缘地方 2005-2999. All Rights Reserved