菜鸟问问题:
    关于原理方面的,asp.net在运行的时候,假设有100个匿名用户访问同一个WEB应用程序,那么这100个用户的计算机上都会开一个线程与服务器通信,那么服务器的WEB应用程序本身只有一个线程吧,那么它区分每个浏览器的方法是什么呢?
    还有就是,public protect private这三个申明很平常,但是我想说的是假设100个用户同时访问一个页面的时候,凑巧有2个用户同时调用同一个方法的时候,服务器是如何响应的?
    小弟想应该是类似于分时机制的原理,希望高手详细指点一下.

解决方案 »

  1.   

    本来IIS就是多线程的,
    另外, 你可以去看看基本的session, application的概念
      

  2.   

    gzlyp(一个好人)  那请你说说,具体是怎么个机制,谢了
      

  3.   

    还有gngnandgngn(仗义执言)  根据我所知道的,多线程技术是只有一个主线程的,其余线程是附加线程,那么如果是一个浏览器对应于一个服务器的线程,根据非优越性原理,凭什么这100个匿名用户的中的一个特殊用户的被选择出来使用主线程。还有那个2级的gzlyp(一个好人),如果你说清楚了,我给100分你。。
      

  4.   

    100个匿名用户的这100个访问请求是顺序串行排队处理的。所谓并行执行asp.net,是服务器上后台处理部分,但是不使指web通讯部分。因此所谓“异步页面”等只有真正专业的开发人员才真正会用,一般人即使使用也往往无效。asp.net从来不知道请求是哪个浏览器来的,它只知道有一个客户端发来一个http命令。asp.net通过这个命令的url路径知道应该传递给哪一个(虚拟目录下的)应用程序处理。这个http信令中(例如如果是post指令)可能包含客户端的cookie。iis通过cookie中的一个数值来判会话的SessionID。或者即使客户端不支持cookie,asp.net也有一种扩展的cookiless的方法来判断会话SessionID话。然后asp.net就可以根据这个SessionID将所有无关的会话的状态变量屏蔽掉,只给你的程序设置这个SessionID相关的Session集合可访问。根本不知道浏览器是谁,只凭SessionID来判断会话。否则,就认为是从一个新创建的会话来的请求。
      

  5.   

    假设同时有3个会话(不一定是三个人访问,也是是两个人中一个人同时有两个会话)访问同一网站的a.aspx页面,首先iis就收到第一个会话的请求,把请求交给asp.net进程,然后再把请求交给这个应用程序进程,然后创建asp.aspx所对应的对象(类)的新实例,给它设置Cache、Session,然后交给这个对象实例去处理(包括读取页面ViewState、客户端录入的值、产生页面控件树和正确的状态、依次触发事件),最后将输出下载给第一个会话。处理完第一个,开始处理第二个会话,过程同上。之后是第三个会话。
      

  6.   

    说明一下:所谓“包括读取页面ViewState、客户端录入的值”也就是对http的请求命令中的附属的参数进行解析。对于这些应用程序来说,一次服务处理就跟你读取一封文本格式的电子邮件一样,只是收到一串字符串,然后解析成几个参数,然后调用相应的类型代码产生一个要回复的字符串,作为邮件发回去。
      

  7.   

    Q:    关于原理方面的,asp.net在运行的时候,假设有100个匿名用户访问同一个WEB应用程序,那么这100个用户的计算机上都会开一个线程与服务器通信,那么服务器的WEB应用程序本身只有一个线程吧,那么它区分每个浏览器的方法是什么呢?
    A:  Web服务器,只有1个进程,有多个线程!
    Q:    还有就是,public protect private这三个申明很平常,但是我想说的是假设100个用户同时访问一个页面的时候,凑巧有2个用户同时调用同一个方法的时候,服务器是如何响应的?
    A:  为每个会话开启一个线程,故每个线程拥有独立的对象群!你描述的情况下,不同用户调用不同实例的同一个方法!
      

  8.   

    我觉得你问的应该是web服务器如何响应HTTP请求.这与web服务器采用的什么技术,好像没有多少关系.