能开多少线程

mirrorspace 2020-05-09 06:56:58
如题
C# .NET CORE 2.2 WINDOWS 10 系统 I7 4/8

在这个计算机系统环境下?

这个最多可以有多少个线程并行执行?

开线程的数目和那些因素有关系呢?
...全文
1058 50 打赏 收藏 转发到动态 举报
写回复
用AI写文章
50 条回复
切换为时间正序
请发表友善的回复…
发表回复
hfjcloud 2020-05-14
  • 打赏
  • 举报
回复
就项目落地而言,关注业务重要,就技术而言,细节很有趣。 楼主应该说的是后者。 比如展开去,线程池怎么用,线程切换是怎么回事,线程如何关闭,线程资源如何分配,并行计算和多线程,多线程并发调度,线程安全,等等等等。这些了解完,对以后业务也非常有帮助,至少你能选择的路更多了
mirrorspace 2020-05-14
  • 打赏
  • 举报
回复
引用 51 楼 轻箬笠 的回复:
就现实情况来说,更关注开多少线程能更合理的把资源用起来,而不是纠结于最多能开多少个线程。如果我没记错的话,线程和性能之间有个类似拱形的关系的,找到那个最高点才是coder要做的。这个问题就跟论坛里面经常有人问的++a++等于多少一样,没多少意思。泡论坛的还是实用为主,搞科研的可以跟搞科研的聊。
轻箬笠 2020-05-14
  • 打赏
  • 举报
回复
就现实情况来说,更关注开多少线程能更合理的把资源用起来,而不是纠结于最多能开多少个线程。如果我没记错的话,线程和性能之间有个类似拱形的关系的,找到那个最高点才是coder要做的。这个问题就跟论坛里面经常有人问的++a++等于多少一样,没多少意思。泡论坛的还是实用为主,搞科研的可以跟搞科研的聊。
  • 打赏
  • 举报
回复
大神,您这对博客园成见真么大。相反我觉得博客园的技术氛围比csdn要好多了,csdn才是到处充满了商业气息。而且关键的问题是谁被谁带弯的都不一定,为什么是博客园的问题呢?
引用 43 楼 wanghui0380 的回复:
[quote=引用 42 楼 失足成万古风流人物 的回复:] 大神,别神叨那些没用的了。并不是所有问题都需要从计算机组成原理讲起。“允许同时运行多少个线程”和“多少个线程真正意义上的并发”不是同一个问题。你说你神叨这些没用的,又不是人家要关注的问题,何苦呢?
不是神叨,很简单。还是为你们自己。被博客园掰弯的,我们负责掰直。 因为很简单,因为现在已经不是一个两个的问题了,现在是8成以上都被博客园给掰弯了。一群弯弯就是腐国了对吧 你也这头像也7年了,对你自己来说,你愿意跟那些掰弯的合作,还是愿意跟正经写代码的合作? 同样我们现在招聘都难,真难招聘一些能真正写代码的人,全都是些被博客园掰弯的,就是不那么弯的,你至少也得花个半年时间给弄直了 所以别为分,为你们自己。能掰直几个是几个 [/quote]
wanghui0380 2020-05-13
  • 打赏
  • 举报
回复
引用 42 楼 失足成万古风流人物 的回复:
大神,别神叨那些没用的了。并不是所有问题都需要从计算机组成原理讲起。“允许同时运行多少个线程”和“多少个线程真正意义上的并发”不是同一个问题。你说你神叨这些没用的,又不是人家要关注的问题,何苦呢?
不是神叨,很简单。还是为你们自己。被博客园掰弯的,我们负责掰直。 因为很简单,因为现在已经不是一个两个的问题了,现在是8成以上都被博客园给掰弯了。一群弯弯就是腐国了对吧 你也这头像也7年了,对你自己来说,你愿意跟那些掰弯的合作,还是愿意跟正经写代码的合作? 同样我们现在招聘都难,真难招聘一些能真正写代码的人,全都是些被博客园掰弯的,就是不那么弯的,你至少也得花个半年时间给弄直了 所以别为分,为你们自己。能掰直几个是几个
  • 打赏
  • 举报
回复
大神,别神叨那些没用的了。并不是所有问题都需要从计算机组成原理讲起。“允许同时运行多少个线程”和“多少个线程真正意义上的并发”不是同一个问题。你说你神叨这些没用的,又不是人家要关注的问题,何苦呢?
引用 38 楼 wanghui0380 的回复:
[quote=引用 37 楼 失足成万古风流人物 的回复:] 楼上的回答都没抓住重点。 其实楼主想问的是windows10操作系统,统一时刻,最多允许运行多少个线程。 我也不知道! 但是不管这个数字是多少,你也不应该开到满。而是根据实际情况开合适的线程。
你知道你在说什么么?都知道系统几纳秒一个时间片,你考虑啥呢?给cpu一个快照,告诉我你当前正在执行几条指令。 你要够快,我告诉你答案,1个核只执行1条指令。这就是你要的答案,同一时间多少个核执行多个指令,这就是你认为的抓住重点的回答?[/quote]
mirrorspace 2020-05-13
  • 打赏
  • 举报
回复
嗯 ~~~~ 原来线程的特点是这样的,的确说的简单直白易懂, 这样的话我是觉得使用线程要: 每个线程执行的任务要简单,在尽量少的CPU时间片内完成,这样线程完成一个少一个,而不是开几个线程,每个线程都要很长的CPU时间才能完成.可以理解为"多次轻量". CPU的线程切换时间"20ms 也就是1个核一分钟3000次切换,6个核180000次切换",原来如此,哎,计算机底层知识几乎没有,所以是很惊奇的. 对于大神你对博客员的看法,我是完全不了解原委,也不想关心,我也有博客员,就是记录自己学习考虑的知识点.方便以后查看. 你提到的"使用博眼球标题的文章",我也是非常反感,在很多媒体上都是这样,疼讯,瘦胡,支流都有这文章,我一看这标题就认为是垃圾,从来不电进去.在你提到之前,我并没有注意到这个媒体惯用的"标题党"也用在博客员的技术博客上了.不过我还是那个想法,反感. 我认为,一个技术人员碰到问题要解决,是不会看这文章的,技术人员要学习,也是从最基本的知识比如原理开始学习,也许有一种人会看,就是只求能"说技术"的人. 哈哈,非常感谢你的回复,结贴了先.搞成撕币就不好了!
引用 39 楼 wanghui0380 的回复:
事实是你永远不可能知道系统正在执行多少条线程,因为这是典型的并发处置 系统在每个时间片都在快速切换任务。所以你能做的事情不是统计多少任务,而是尽量让每个任务最小化,让他尽可能被轮询到,也尽可能被最快完成,避免后续堆积。 那两个例子就已经说明一切,一个快速完成,一个根本完成不了,任务成指数级堆叠
引用 40 楼 wanghui0380 的回复:
系统就像是一个流水线上工人,6核6个工人。任务就是流水线的工件。 流水线不停转而已,所以你觉着这个东西问题再那里? 很明显步骤越少,效率越高。假设一个东西经过3个工人可以被完成,完成后他被扔出流水线 所以你觉着,你讨论什么同一时刻,那是什么时刻。同一时刻流水线上可以有2000个,也可以有1亿个(如果流水线能摆的下的话),同一时刻6个工人也顶多做6个。 windows 正常线程切换速度是20ms 也就是1个核一分钟3000次切换,6个核180000次切换。 记住我讲的是1分钟切换,不是同一时刻,也不是多少个。而是一分钟周期内切换
mirrorspace 2020-05-13
  • 打赏
  • 举报
回复
嗯,我也觉得是这种的,.NET虚拟机会优化
引用 45 楼 早打大打打核战争 的回复:
就我所知,.net,还有Java,并没有真正的操作系统级线程,而是虚拟机模拟的线程,应用程序开了1000个线程,不一定对应1000个操作系统线程,可能只有几百个或者更少。所以,讨论虚拟机语言能开多少线程和(一定硬件条件下)操作系统能开多少线程不完全是一回事,虚拟机的线程调度策略也不一定和操作系统的调度策略一致。
飞天凤凰601 2020-05-13
  • 打赏
  • 举报
回复
如果你 用线程Thread,能多到卡死, 但我建议你用线程池,如:BeginInvoke ,这种系统有它自己的规划;
飞天凤凰601 2020-05-13
  • 打赏
  • 举报
回复
引用 3 楼 wanghui0380 的回复:
不要纠结这些东西,net就是喜欢纠结这些毫无意义的玩意才把工资玩的越来越低的 小学问题,一个管子进水,一个管子出水。你问我们到底能装多少水。 我们说,进====出,你就是把整个太平洋的水灌进去都没问题
你是彻底把我逗笑了
  • 打赏
  • 举报
回复
就我所知,.net,还有Java,并没有真正的操作系统级线程,而是虚拟机模拟的线程,应用程序开了1000个线程,不一定对应1000个操作系统线程,可能只有几百个或者更少。所以,讨论虚拟机语言能开多少线程和(一定硬件条件下)操作系统能开多少线程不完全是一回事,虚拟机的线程调度策略也不一定和操作系统的调度策略一致。
  • 打赏
  • 举报
回复
引用 27 楼 mirror030 的回复:
第二个把电脑搞崩溃了!

[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)
{

}
}



你照着这个运行一次就知道具体是多少了。 线程本身并没什么难得,关键在共享资源的处理上,线程的管理上。
[/quote]


内存池会堆满啊,线程数会满啊,然后内存不足电脑down了是会有的,但是你可以看到数量的嘛。。。
dodo816 2020-05-12
  • 打赏
  • 举报
回复
换个服务器吧~PC已经不够你用了~
xiaoxiangqing 2020-05-12
  • 打赏
  • 举报
回复
跟电脑配置有关,线程数是有限的
wanghui0380 2020-05-12
  • 打赏
  • 举报
回复
系统就像是一个流水线上工人,6核6个工人。任务就是流水线的工件。 流水线不停转而已,所以你觉着这个东西问题再那里? 很明显步骤越少,效率越高。假设一个东西经过3个工人可以被完成,完成后他被扔出流水线 所以你觉着,你讨论什么同一时刻,那是什么时刻。同一时刻流水线上可以有2000个,也可以有1亿个(如果流水线能摆的下的话),同一时刻6个工人也顶多做6个。 windows 正常线程切换速度是20ms 也就是1个核一分钟3000次切换,6个核180000次切换。 记住我讲的是1分钟切换,不是同一时刻,也不是多少个。而是一分钟周期内切换
wanghui0380 2020-05-12
  • 打赏
  • 举报
回复
事实是你永远不可能知道系统正在执行多少条线程,因为这是典型的并发处置 系统在每个时间片都在快速切换任务。所以你能做的事情不是统计多少任务,而是尽量让每个任务最小化,让他尽可能被轮询到,也尽可能被最快完成,避免后续堆积。 那两个例子就已经说明一切,一个快速完成,一个根本完成不了,任务成指数级堆叠
wanghui0380 2020-05-12
  • 打赏
  • 举报
回复
引用 37 楼 失足成万古风流人物 的回复:
楼上的回答都没抓住重点。 其实楼主想问的是windows10操作系统,统一时刻,最多允许运行多少个线程。 我也不知道! 但是不管这个数字是多少,你也不应该开到满。而是根据实际情况开合适的线程。
你知道你在说什么么?都知道系统几纳秒一个时间片,你考虑啥呢?给cpu一个快照,告诉我你当前正在执行几条指令。 你要够快,我告诉你答案,1个核只执行1条指令。这就是你要的答案,同一时间多少个核执行多个指令,这就是你认为的抓住重点的回答?
  • 打赏
  • 举报
回复
楼上的回答都没抓住重点。 其实楼主想问的是windows10操作系统,统一时刻,最多允许运行多少个线程。 我也不知道! 但是不管这个数字是多少,你也不应该开到满。而是根据实际情况开合适的线程。
wanghui0380 2020-05-11
  • 打赏
  • 举报
回复
实际上我们之所以反对整天讨论线程问题。是因为这些讨论线程的都忽略了标准。 没标准谈啥,就谈4行的thread,4行的lock。这就开玩笑了。 我前面的描述,你知道我做过水利水文,航道的项目。同样前面我也说过我做过机场的项目 那么我现在说,我还做过交通管理的项目。 当我去交通局,交警大队,交通规划设计院去调研,你会发现他们的手段和思维和我们惊人的相似。 交通规划最重要的3个指标:信号周期,绿信比,绿波带 对其实这也是我们对线程的考虑,其实并没有人考虑什么一个路口能停多少量车,路口就那么大。你讨论单位面积他能放多少量车有啥意义。 所以人家的指标说的是,一个信号周期多长,绿灯占整个周期多少(绿信比),如果车辆正常顺利通行,从上个路口到下一个路口是否正好是绿灯(绿波带) 俺们对线程考量指标其实一样,你看上面两位其实都如此。我的执行要多长,一个操作要多长,执行周期多长。我的执行占比多长。下次调度是否正好通过(不必等待)
  • 打赏
  • 举报
回复
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)
{

}
}



你照着这个运行一次就知道具体是多少了。 线程本身并没什么难得,关键在共享资源的处理上,线程的管理上。
加载更多回复(30)

110,536

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

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