1 windows本身不就已经是多线程在工作吗?那就是说我们的asp.net网页程序,也默认是在多线程工作,既然这样,为什么还需要多线程编程提高效率?
2 一个asp.net动态网页程序,如果很多人在同时请求访问,那是不是可以这么理解,每个请求过来,系统都会增加一个主线程?然后主线程又开了N多个子线程去处理各种任务?
3 比如我们有一个类叫classa,然后我们创建这个类的实例,classa thisa = new classa();
执行这句话,服务器就是把一个类实例化并放入到一个内存中
这时候我困惑的是,如果多个线程都在new这个实例的时候,那么他们之间是共享这个类实例,还是各自有各自的类实例?
如果共享的话,就意味着同时new时会产生冲突,有可能请求出来n个出来,那么我们平时这么写
new classa(),就是存在风险的,必须先lock,但现在看很少有人考虑new 实例时去lock它,为什么?
如果各自有各自的实例,那么岂不是占用很多的内存?而这些实例又是一样的,似乎windows也没有必要做先问这几个问题,请达人给答疑解惑,谢谢了
2 一个asp.net动态网页程序,如果很多人在同时请求访问,那是不是可以这么理解,每个请求过来,系统都会增加一个主线程?然后主线程又开了N多个子线程去处理各种任务?
3 比如我们有一个类叫classa,然后我们创建这个类的实例,classa thisa = new classa();
执行这句话,服务器就是把一个类实例化并放入到一个内存中
这时候我困惑的是,如果多个线程都在new这个实例的时候,那么他们之间是共享这个类实例,还是各自有各自的类实例?
如果共享的话,就意味着同时new时会产生冲突,有可能请求出来n个出来,那么我们平时这么写
new classa(),就是存在风险的,必须先lock,但现在看很少有人考虑new 实例时去lock它,为什么?
如果各自有各自的实例,那么岂不是占用很多的内存?而这些实例又是一样的,似乎windows也没有必要做先问这几个问题,请达人给答疑解惑,谢谢了
问题二、每个请求均会有相应的Session,每个Session都至少有一个线程;
问题二、每个线程都是会创建一个实例的,各自有各自的实例,占内存是肯定的,因为有可能每个页面实例的值是不一样的。另外,如果你声明的类是Static的,这时候就需要进行线程之间的同步操作;问题其实很简单,不需要困惑的。
我的简单理解啊
"系统都会增加一个主线程"-->"默认是在多线程工作"
"N多个子线程去处理各种任务"-->"多线程编程提高效率"
请高人指点
不过还是不明白,自己编程时采用多线程提高效率跟Windows本身的线程不是一个概念,是什么意思?
我们的说的线程和windows的线程难道不是一个东西?
执行这句话,服务器就是把一个类实例化并放入到一个内存中
这时候我困惑的是,如果多个线程都在new这个实例的时候,那么他们之间是共享这个类实例,还是各自有各自的类实例?
如果共享的话,就意味着同时new时会产生冲突,有可能请求出来n个出来,那么我们平时这么写
new classa(),就是存在风险的,必须先lock,但现在看很少有人考虑new 实例时去lock它,为什么?
如果各自有各自的实例,那么岂不是占用很多的内存?而这些实例又是一样的,似乎windows也没有必要做 lock的情况,是必须考虑的,如果是new的动态的实例,那么每个请求都会有一个实例,所以不用考虑lock的情况,但对于静态的类的实例,静态的方法,因为共享这些实例和方法,就要lock了,内存的占用gc会根据优先级回收
当new Class时,创建时,产生一个线程,作为我设计人员不必考虑这些线程,就象一个闹钟,我们不必考虑内部的齿轮相互间如何运转的,我只要知道,如何设置闹钟就行了
所以,我们不考虑内存问题,内存问题在ASP。net有一个GC的类是可以处理和查看的