lock就要排队,排队就不是多线程?
c#多线程采集数据,我把采集的方法,放到一个类里,新建的线程调用一个类的实例中的方法,这样同时还能传入各种参数, 但是如果不lock,这个过程依然不安全,会导致方法中的变量混乱, 但是lock了,线程就要排队,不是真正的多线程同时执行。
c#到底有没有真正的多线程,又安全的方法呢? 比如,我把执行的过程封装成一个单独的dll,然后每个线程都创建这个dll的实例,这个想法是不是和类其实是一个意思呢 ? 哎。。。。
希望大家能指点一下,
线程是动态创建的 线程同时执行,不用排队 线程传入的参数不同 但是方法相同 线程之间不要干扰 虽然执行同样的方法,但是互不影响 首先类里定义的变量不叫局部变量,叫做成员变量。同一个实例的成员变量只有一个,是共享的。局部变量是在函数中定义的变量,在没有向外传送的时候是安全的。 从某个角度上来说,多线程确实有快不太多——特别是对于那种老式的单核CPU, 只进行那种纯粹的科学计算来说。
换一个比较好理解的例子吧。 来了一车货要卸, 一个人负责把车上的东西一件件地往下搬到商店里(设为任务A), 另一个人负责把这些已经搬下来的东西放在商店的货架上(设为任务B)。
如果设计多线程, 那就让车上的人往下搬的人(任务A)再增加到5个。
好吧, 那你就说了: A的人有5个, B的才1个,那5个人到了B这里, 岂不是要排队了反而变慢?
其实并不是这样, 5个人搬东西的速度并不是一致的, 而且车上到商店还有一段路, 这样会导致不同做A的人到达B的时候并不是在同一时间, 所以排队的机会是很少的。
所以在5个一起做这种比较慢的事情, 速度虽然达不到5倍(偶尔还是得排一下队), 但效率也还是提高了……
你要做数据采集, 应该是从DB里取数据对吧?I/O操作是比较慢的, 比较适合用多线程。
至于你所说的lock , 建议你把思路整理一下, 把最简洁最能表达你思想的代码做成一个能运行的小demo, 然后贴出来。 再让人家去改善, 我想这样会有更多人愿意花点时间来帮你。
没有具体对象地空谈思路, 说不出个所以然来
|