就现实情况来说,更关注开多少线程能更合理的把资源用起来,而不是纠结于最多能开多少个线程。如果我没记错的话,线程和性能之间有个类似拱形的关系的,找到那个最高点才是coder要做的。这个问题就跟论坛里面经常有人问的++a++等于多少一样,没多少意思。泡论坛的还是实用为主,搞科研的可以跟搞科研的聊。
[quote=引用 42 楼 失足成万古风流人物 的回复:] 大神,别神叨那些没用的了。并不是所有问题都需要从计算机组成原理讲起。“允许同时运行多少个线程”和“多少个线程真正意义上的并发”不是同一个问题。你说你神叨这些没用的,又不是人家要关注的问题,何苦呢?
大神,别神叨那些没用的了。并不是所有问题都需要从计算机组成原理讲起。“允许同时运行多少个线程”和“多少个线程真正意义上的并发”不是同一个问题。你说你神叨这些没用的,又不是人家要关注的问题,何苦呢?
[quote=引用 37 楼 失足成万古风流人物 的回复:] 楼上的回答都没抓住重点。 其实楼主想问的是windows10操作系统,统一时刻,最多允许运行多少个线程。 我也不知道! 但是不管这个数字是多少,你也不应该开到满。而是根据实际情况开合适的线程。
事实是你永远不可能知道系统正在执行多少条线程,因为这是典型的并发处置 系统在每个时间片都在快速切换任务。所以你能做的事情不是统计多少任务,而是尽量让每个任务最小化,让他尽可能被轮询到,也尽可能被最快完成,避免后续堆积。 那两个例子就已经说明一切,一个快速完成,一个根本完成不了,任务成指数级堆叠
系统就像是一个流水线上工人,6核6个工人。任务就是流水线的工件。 流水线不停转而已,所以你觉着这个东西问题再那里? 很明显步骤越少,效率越高。假设一个东西经过3个工人可以被完成,完成后他被扔出流水线 所以你觉着,你讨论什么同一时刻,那是什么时刻。同一时刻流水线上可以有2000个,也可以有1亿个(如果流水线能摆的下的话),同一时刻6个工人也顶多做6个。 windows 正常线程切换速度是20ms 也就是1个核一分钟3000次切换,6个核180000次切换。 记住我讲的是1分钟切换,不是同一时刻,也不是多少个。而是一分钟周期内切换
就我所知,.net,还有Java,并没有真正的操作系统级线程,而是虚拟机模拟的线程,应用程序开了1000个线程,不一定对应1000个操作系统线程,可能只有几百个或者更少。所以,讨论虚拟机语言能开多少线程和(一定硬件条件下)操作系统能开多少线程不完全是一回事,虚拟机的线程调度策略也不一定和操作系统的调度策略一致。
不要纠结这些东西,net就是喜欢纠结这些毫无意义的玩意才把工资玩的越来越低的 小学问题,一个管子进水,一个管子出水。你问我们到底能装多少水。 我们说,进====出,你就是把整个太平洋的水灌进去都没问题
第二个把电脑搞崩溃了! [quote=引用 22 楼 兔子家族-二哥 的回复:] for (int i = 0; i < int.MaxValue; i++) { Thread t=new Thread(RecMsg); t.Start(i); Console.WriteLine(i); } static void RecMsg(object i) { where(true) { } } 你照着这个运行一次就知道具体是多少了。 线程本身并没什么难得,关键在共享资源的处理上,线程的管理上。
楼上的回答都没抓住重点。 其实楼主想问的是windows10操作系统,统一时刻,最多允许运行多少个线程。 我也不知道! 但是不管这个数字是多少,你也不应该开到满。而是根据实际情况开合适的线程。
110,536
社区成员
642,578
社区内容
加载中
让您成为最强悍的C#开发者
试试用AI创作助手写篇文章吧