日期:2014-05-17  浏览次数:21021 次

多线程的时候,为什么同时只有1-2个线程在running。。
多线程的时候,为什么同时只有1-2个线程在running。。

而其他线程却都在WaitSleepJoin

看了一下线程池。。没有啥问题。。

至于这种情况,该如何解决? 

望大虾们不吝赐教。。

不胜感激。。

------解决方案--------------------
.Net会自动管理线程运行状态,多个线程切换的时候会影响效率,所以一般有多少个cpu就运行多少个线程,


------解决方案--------------------
线程也是用cpu来执行的,一个cpu同一个时间只能执行一个线程,没有空闲的cpu,线程就无法执行,

线程数远远多于cpu数目的时候,.Net会划分时间片,一个cpu在这个时间片运行线程1,下一个时间片运行线程2,这样就出现线程切换,其实很耗资源,影响效率,

探讨
引用:

.Net会自动管理线程运行状态,多个线程切换的时候会影响效率,所以一般有多少个cpu就运行多少个线程,


怎么会跟CPU扯上关系呢?印象中,好像跟这个没啥关系的吧

------解决方案--------------------
不过你的线程处于WaitSleepJoin可能是因为锁定同步对象造成的,不同线程访问同一个界面元素的时候,会互斥,.Net会不让多个线程同时访问一个对象,这样只有一个线程能访问,其他线程进入WaitSleepJoin排队等候这个线程访问完之后再恢复执行状态,

.Net有很多“线程安全”的对象,这些对象内部都有互斥锁,只允许一个线程访问它,多个线程访问的时候就会进入WaitSleepJoin状态,
------解决方案--------------------
一般不行,线程需要资源才能运行,包括cpu,包括申请的互斥锁,如果当时线程申请的资源缺乏,它就只能进入WaitSleepJoin等待,

探讨
引用:

线程也是用cpu来执行的,一个cpu同一个时间只能执行一个线程,没有空闲的cpu,线程就无法执行,

线程数远远多于cpu数目的时候,.Net会划分时间片,一个cpu在这个时间片运行线程1,下一个时间片运行线程2,这样就出现线程切换,其实很耗资源,影响效率,

引用:
引用 1 楼 stonesp……