线程如何在对象中工作

and*_*ndy 1 .net multithreading windows-services

嘿伙计们,我在线程方面完全缺乏经验,所以这是我的问题:

线程如何在对象的实例中工作,特别是我正在使用Windows服务.

那么,我的服务基本上是一个对象的实例吗?

所以,假设我的服务中有一个System.Timers.Timer,并且每10秒触发一次ElapsedEventHandler.

假设Timer事件处理程序中的每个操作都需要1分钟才能完成.

每个事件是否由不同的线程处理?

如果是这样,我的对象的属性如何对此作出反应?属性是否跨线程共享?

什么是线程限制?他们跑了吗?如果是这样,当Timer事件触发并且所有线程都被占用时会发生什么?

非常感谢,我特别感兴趣的是如何跨线程共享属性?如果那就是发生了什么.

干杯!

Mar*_*ell 5

乔恩斯基特对线程基础几页介绍,这里(注意有17个不同主题的网页在这里).

每个事件是否由不同的线程处理?

这取决于具体的计时器,但这将是一个安全(即最坏情况)的假设

属性是否跨线程共享?

是; 除非您自己编写,要么[MethodImpl(MethodImplOptions.Synchronized)](使方法同步),要么使用诸如的结构,否则不会保护多个线程访问您的数据lock.唯一的例外是使用特殊属性标记的静态字段[ThreadStatic],然后每个线程有一个静态字段.

什么是线程限制?他们跑了吗?如果是这样,当Timer事件触发并且所有线程都被占用时会发生什么?

部分受OS资源限制,部分受限于它们是"常规"线程还是池线程.但是如果你使用足够的东西来解决这个问题,你就会有太多的线程.如果没有足够的资源来启动一个线程,它将开始失败(常规线程),或者工作将简单地堆积起来,等待更多可用性(池线程).完全可能使线程池饱和并使所有​​内容死锁.基本上避免使用太多线程.