Community Server专题附录一: 什么是Threads & Processes

线程和进程(Threads and Processes), 简单说,你启动一个程序,就启动了一个进程,早期win3.x的系统以进程为单位(嘿嘿,其实我没有用过win3.x),win98后每个进程还可以启动几个线程,因此以线程为单位。在如今的操作系统下线程间是独立运行的,但是他们共享一些内存中的片断,如:全局变量等。

问题来了:CS在服务器上运行是多线程的吗?每个用户的Http请求CS做了什么?CS系统在被第一次访问的时候由asp.net运行机制启动一个CS进程,启动进程是需要给该进程分配独立的内存地址的,该地址不受其他的进程影响和操作。也就是说如果你还有其他的Web程序是无法访问这段内存空间的(正常情况下进程与进程之间是安全的)。有了CS的进程还不够,前面说过win98后的操作系统执行的最小单元时线程而不是进程。因此接下来会为这个请求启动一个线程(对于web程序来说,Http请求的线程启动过程不需要你使用System.Threading命名空间下的方法,启动的过程右asp.net运行机制完成),由于一个进程的所有线程都共享它的内存地址空间、全局变量和操作系统资源,因此这个请求可以根据共享的资源为自己建立一个上下文Context,然后处理相关的请求操作,请求完成后线程会被释放,他的生存周期也就结束了(因此说Http请求是无状态的,因为同一个用户的两次Http请求会建立两个不同的线程,他们的Context是不同的,而且有前后顺序。但是为了保存一些必要的状态信息因此有了Cookies与Session等)。当有第二个http请求发出的时候,很有可能第一个http请求还没有处理完成,因此这里就牵涉到了多线程执行下的线程安全问题。

线程安全,是指一个方法(method)可以在多线程的环境下安全的有效的访问进程级的数据(这些数据是与其他线程共享的)。要保证线程安全关键是同步,保证多个线程同时开始执行,并行运行、不同时访问相同的对象实例、不同时执行同一段代码,.net下我们可以通过一些手段来保证我们的数据是安全的,如采用System.Threading.Monitor加锁以确保对共享数据访问的同步性。其实在MSDN中我经常都会看到对一个方法介绍时候都会加以说明该方法是Thread Safe,也就是线程安全的。线程安全是一个高级议题,不能再往下说了,不然就见底了。

其实只要不重新启动IIS那么CS的进程就一直存在,而且只有一个。但是CS的线程就多了,根据不同的Http请求会有多个线程,同时CS中还使用了Timer,它也会启动新的处理线程,该线程的生命周期一直持续到Timer被Dispose。

可以看出CS是一个复杂的多线程程序,当然所有的web app都是多线程的,因此分析之前很有必要了解线程与进程的概念
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

xp9802

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值