IIS是怎么处理多个请求的?

  一,假设有一台服务器,它的IIS上部署有一个Web应用程序-S,可以通过浏览器或其他方式进行访问。
    假设有A、B、C三台电脑同时访问网站S,IIS接收到3个HTTP请求,然后分别为三个请求各建立一个线程。每个线程都有各自的线程栈,每个用户的数据都放在各自线程栈中,也只有用户线程才能取得对应线程栈中的数据,线程之间不会相互影响。这就是为什么一个网站程序能同时被多个用户访问。
    用户的线程运行时,会生成很多的引用类型的对象,这些对象都存在托管堆上,托管堆不像栈只能被所属的线程访问,它能被所有线程共同访问,那各个线程怎么取得自己创建的对象而不会取到其他线程所创建的对象呢?这是因为对象实例虽然在托管堆上,但实例的引用是在线程栈上的,线程要根据实例的引用才能取得实例数据,而线程栈又只能被对应的线程访问,所以线程只会取到自己创建的对象实例,而不会取到其他用户线程所创建的对象实例,同时也不会被其他用户线程取走对象实例。
    当然,值类型数据就不用说,它们都存在于线程栈上,只有各自的线程才能访问,也就是只有各自的用户可以访问。
原文博主:https://www.cnblogs.com/wangyihome/p/8275728.html
二,在我们配置IIS的时候我们的网站,IIS网站对应的进程名一般叫w3wp.exe ,当用户请求过来,IIS会给用户开启一个线程,当这个线程同时请求一个方法时,这时候就是并发,所以在线程的并发我们可以用lock, 锁定一个在托管堆上的对象,当这个对象被锁定时,其他进程等待这个对象被当前进程使用完,然后才可以使用该方法,这个就是lock的使用
 

猜你喜欢

转载自www.cnblogs.com/May-day/p/10142111.html