就剩100分全送了,问一个让我很困惑的线程问题

hongxiutl 2008-07-15 02:38:55
1 windows本身不就已经是多线程在工作吗?那就是说我们的asp.net网页程序,也默认是在多线程工作,既然这样,为什么还需要多线程编程提高效率?
2 一个asp.net动态网页程序,如果很多人在同时请求访问,那是不是可以这么理解,每个请求过来,系统都会增加一个主线程?然后主线程又开了N多个子线程去处理各种任务?
3 比如我们有一个类叫classa,然后我们创建这个类的实例,classa thisa = new classa();
执行这句话,服务器就是把一个类实例化并放入到一个内存中
这时候我困惑的是,如果多个线程都在new这个实例的时候,那么他们之间是共享这个类实例,还是各自有各自的类实例?
如果共享的话,就意味着同时new时会产生冲突,有可能请求出来n个出来,那么我们平时这么写
new classa(),就是存在风险的,必须先lock,但现在看很少有人考虑new 实例时去lock它,为什么?
如果各自有各自的实例,那么岂不是占用很多的内存?而这些实例又是一样的,似乎windows也没有必要做

先问这几个问题,请达人给答疑解惑,谢谢了
...全文
185 21 打赏 收藏 转发到动态 举报
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
cndrip 2008-07-15
  • 打赏
  • 举报
回复
C#是自动垃圾回收的,
当new Class时,创建时,产生一个线程,作为我设计人员不必考虑这些线程,就象一个闹钟,我们不必考虑内部的齿轮相互间如何运转的,我只要知道,如何设置闹钟就行了
所以,我们不考虑内存问题,内存问题在ASP。net有一个GC的类是可以处理和查看的
seesea125 2008-07-15
  • 打赏
  • 举报
回复
1 windows本身不就已经是多线程在工作吗?那就是说我们的asp.net网页程序,也默认是在多线程工作,既然这样,为什么还需要多线程编程提高效率?

asp.net是多线程处理,但对于每个请求又是单线程在处理,多线程编程会提高效率,但是有适用场合,线程过多也会导致cpu太高,w3wp回收频繁,而且也要考虑线程的通信和同步问题,增加编程的难度和可控度

2 一个asp.net动态网页程序,如果很多人在同时请求访问,那是不是可以这么理解,每个请求过来,系统都会增加一个主线程?然后主线程又开了N多个子线程去处理各种任务?

开一个主线程,但没有N个子线程处理,而是顺序处理

3 比如我们有一个类叫classa,然后我们创建这个类的实例,classa thisa = new classa();
执行这句话,服务器就是把一个类实例化并放入到一个内存中
这时候我困惑的是,如果多个线程都在new这个实例的时候,那么他们之间是共享这个类实例,还是各自有各自的类实例?
如果共享的话,就意味着同时new时会产生冲突,有可能请求出来n个出来,那么我们平时这么写
new classa(),就是存在风险的,必须先lock,但现在看很少有人考虑new 实例时去lock它,为什么?
如果各自有各自的实例,那么岂不是占用很多的内存?而这些实例又是一样的,似乎windows也没有必要做

lock的情况,是必须考虑的,如果是new的动态的实例,那么每个请求都会有一个实例,所以不用考虑lock的情况,但对于静态的类的实例,静态的方法,因为共享这些实例和方法,就要lock了,内存的占用gc会根据优先级回收
jin1002 2008-07-15
  • 打赏
  • 举报
回复
多线程感觉就像向CPU多要时间片来执行程序
mywisest 2008-07-15
  • 打赏
  • 举报
回复
Windows本身的线程是为了维护或保证线程运行的正常;而自己编程所采用的线程是告诉系统需要做多少事情,该怎么做;

线程当然是一个东西,都是CPU的分时。
jl_lsj 2008-07-15
  • 打赏
  • 举报
回复
up jf
hongxiutl 2008-07-15
  • 打赏
  • 举报
回复
wisest 说的,我似乎有点明白了,呵呵,谢谢
不过还是不明白,自己编程时采用多线程提高效率跟Windows本身的线程不是一个概念,是什么意思?
我们的说的线程和windows的线程难道不是一个东西?
hongxiutl 2008-07-15
  • 打赏
  • 举报
回复
这么说,对于一个网页来说,如果分为多个线程去实现不同的部分,那网页执行的效率就会提升的话,为什么我们在写网页代码的时候,没有人去这么做呢?什么时候应该这么做呢?
twqmaomao1 2008-07-15
  • 打赏
  • 举报
回复
出来做俯卧撑!
hubblebubblepig 2008-07-15
  • 打赏
  • 举报
回复
而且针对asp.net的多个请求 好像是iis里面的工作机制 而和操作系统的多线程不是一回事情
hubblebubblepig 2008-07-15
  • 打赏
  • 举报
回复
对你的第一个和第二个问题
我的简单理解啊
"系统都会增加一个主线程"-->"默认是在多线程工作"
"N多个子线程去处理各种任务"-->"多线程编程提高效率"
请高人指点
mywisest 2008-07-15
  • 打赏
  • 举报
回复
问题一、Windows本身是多线程没错,默认也是多线程工作的。但自己编程时采用多线程提高效率跟Windows本身的线程不是一个概念。譬如,你在编程时要执行步骤1\2\3\4\5\6,这是按照顺序执行下来的,如果你用多线程操作,告诉系统创建6个线程,分别执行1-6的步骤,那么效率是不是提高了许多呢?
问题二、每个请求均会有相应的Session,每个Session都至少有一个线程;
问题二、每个线程都是会创建一个实例的,各自有各自的实例,占内存是肯定的,因为有可能每个页面实例的值是不一样的。另外,如果你声明的类是Static的,这时候就需要进行线程之间的同步操作;

问题其实很简单,不需要困惑的。
akunshenjk 2008-07-15
  • 打赏
  • 举报
回复
做俯卧撑了
hubblebubblepig 2008-07-15
  • 打赏
  • 举报
回复
可以确定一点 如果多个线程都new一个对象的话 这些对象肯定是不同的 而不是共有的
laoyingisme 2008-07-15
  • 打赏
  • 举报
回复
这个问题估计好翻书了
hongxiutl 2008-07-15
  • 打赏
  • 举报
回复
没人知道吗?
烈火焚身 2008-07-15
  • 打赏
  • 举报
回复
up
Feiin 2008-07-15
  • 打赏
  • 举报
回复
mark
万小萌 2008-07-15
  • 打赏
  • 举报
回复
帮顶!
hongxiutl 2008-07-15
  • 打赏
  • 举报
回复
如楼上大哥所说,windows本身是在多线程工作,但我们做程序,却都做成单线程的了?这似乎有点不可能把,也许是framework封装了,但单线程我觉得不大可能,大家多讨论讨论把
lc329857895 2008-07-15
  • 打赏
  • 举报
回复
路过
加载更多回复(1)

62,159

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧