这两天学习了一下线程、进程,但是用的都是C#控制台应用程序。
我的状态就是知道一些基本概念,知道Thread类,会一些简单的基本应用。自己模仿着写了一个关于线程的银行取钱的问题,自己测试,完全没有体会到它的好处来,感觉就是为了线程而线程。我的问题一是:在web开发中使用基于线程的多线程问题能够带来哪些好处以及作用?
另外,在多个客户端访问一个网站,是在每个客户端都实例化一个进程?还是怎么回事啊?从我学习开始,我就没有弄明白,期待高手解惑
第三个问题,线程同步和锁的问题,如果我新建了一个网站,程序中有一个共享的互斥变量,使用lock锁住,如我在两个客户端访问这个网站的时候,一个客户端进入lock区域后,另外一个必须就必须等待吗?高手们,快来畅所欲言,给我解惑吧

解决方案 »

  1.   

    1,web开发不需要多线程,需要多线程的相关逻辑IIS已经帮你实现好了.其实你相当于给IIS开发了一个组件而已.不相信?看你bin下编译出的东西就知道.2,多个客户端访问一个网站的时候 一般的WEB服务器有2种做法.
      1)阻塞+多线程式  -- 为每个连接过来的用户开启一个线程处理(或者用线程池)用户处理完毕之后线程释放.
      2)非阻塞 -- 非阻塞的方式处理所有用户请求,一般只有1-2个线程做侦听,而处理上可能是结合线程池.
    这个问题已经不需要WEB开发人员去关注了,具体情况是IIS或者其他WEB容器所干的活.3,如果以系统提供的内存对象来说一个网站的内存分为 应用程序内存 和 用户会话内存. 其中用户会话是独享,应用程序内存是共享.也只有应用程序内存需要考虑锁这个问题. 
      在线程角度,如果有现成锁了某区域,当然其他的就必须等待.
      

  2.   

    恩,网上有很多这样的问题,去百度,google找找
    1,web开发不需要多线程,需要多线程的相关逻辑IIS已经帮你实现好了.其实你相当于给IIS开发了一个组件而已.不相信?看你bin下编译出的东西就知道.2,多个客户端访问一个网站的时候 一般的WEB服务器有2种做法.
      1)阻塞+多线程式 -- 为每个连接过来的用户开启一个线程处理(或者用线程池)用户处理完毕之后线程释放.
      2)非阻塞 -- 非阻塞的方式处理所有用户请求,一般只有1-2个线程做侦听,而处理上可能是结合线程池.
    这个问题已经不需要WEB开发人员去关注了,具体情况是IIS或者其他WEB容器所干的活.3,如果以系统提供的内存对象来说一个网站的内存分为 应用程序内存 和 用户会话内存. 其中用户会话是独享,应用程序内存是共享.也只有应用程序内存需要考虑锁这个问题.  
      在线程角度,如果有现成锁了某区域,当然其他的就必须等待.
      

  3.   

    当一个线程A进入了lock代码段,说明这个线程取得了该资源的锁,其他线程必须都处于等待状态,一直到A走出lock代码区
      

  4.   

    参考资料,好好看完了,再说,你一定会有收获!
    1、C#多线程学习(一) 多线程的相关概念
    http://www.cnblogs.com/xugang/archive/2008/04/06/1138856.html
    2、 C#多线程学习 (二) 如何操纵一个线程
    http://www.cnblogs.com/xugang/archive/2008/04/06/1138841.html
    3、 C#多线程学习 (三) 生产者和消费者
    http://www.cnblogs.com/xugang/archive/2008/03/23/1118594.html
    4、 C#多线程学习 (四) 多线程的自动管理(线程池)
    http://www.cnblogs.com/xugang/archive/2008/03/23/1118584.html
    5、 C#多线程学习 (五) 多线程的自动管理(定时器)
    http://www.cnblogs.com/xugang/archive/2008/03/23/1118537.html
    6、 C#多线程学习 (六) 互斥对象
    http://www.cnblogs.com/xugang/archive/2008/03/23/1118530.html
    7、.Net 线程问题解答
    http://www.cnblogs.com/yizhu2000/archive/2008/01/03/1011958.html
    8、 Visual C#中使用线程
    http://www.cnblogs.com/ZHOULONG/archive/2008/04/06/1139067.html
    9、 C# 线程资源同步方式总结
    http://www.cnblogs.com/VincentWP/archive/2008/06/25/1229104.html
    10、 C# 线程系列讲座(1):BeginInvoke和EndInvoke方法
    http://www.cnblogs.com/nokiaguy/archive/2008/07/13/1241817.html
    11、 C# 线程系列讲座(2):Thread类的应用
    http://www.cnblogs.com/nokiaguy/archive/2008/07/16/1244746.html
    12、 C# 线程系列讲座(3):线程池和文件下载服务器
    http://www.cnblogs.com/nokiaguy/archive/2008/07/18/1246299.html
    13、 C# 线程系列讲座(4):同步与死锁 
    http://www.cnblogs.com/nokiaguy/archive/2008/07/25/1251756.html
    14、 C# 线程系列讲座(5):同步技术之Monitor
    http://www.cnblogs.com/nokiaguy/archive/2008/07/31/1257625.html
      

  5.   

    楼主,我的回答向来很无聊:
    有机会写个Web Server就知道了,Thread不是Web开发者的事情,Thread的调度是Server的事情。而且Server也不希望Web的开发者使用任何Thread相关的操作,虽然禁不掉。
      

  6.   

    如我在两个客户端访问这个网站的时候,一个客户端进入lock区域后,另外一个必须就必须等待吗?一个用户进入。。其它等待