一个CPU线程数的问题

musics52 2010-11-22 05:53:39
我遇到一个纠结问题,请高手解答:

C#程序,我需要开启N个线程,结果发现,线程数达到50程序就死机了(双核机器)。同样的程序,在另一台服务器上(8个cpu),可以加到200个线程,我把我电脑的一个cpu对这个进程禁用,结果只能加到25个线程,很明显是和cpu有关(一个cpu最多只能对一个进程开启25个线程吗?),但是我却不知道该如何解决。
请问有人知道这是怎么回事吗?能有办法解决吗?

我的需求是一个服务器能够同时连接5000+个远程客户端(长连接)
...全文
380 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
criedshy 2011-01-26
  • 打赏
  • 举报
回复
Ccr.Core.dll

是这个,网上有相关资料
criedshy 2011-01-26
  • 打赏
  • 举报
回复
系统开启的线程数有限制的

你可以考虑用微软机器人工作室出的ccr.code.dll,这个可以开启更多线程。
ttcchh2008 2011-01-26
  • 打赏
  • 举报
回复
采用线程池作吧。把相应的任务交给FrameWork去完成。
ThreadPool这个还是蛮适合你的情况的。
musics52 2010-11-22
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 zenghd 的回复:]
System.Diagnostics.Process.GetCurrentProcess().ProcessorAffinity = (IntPtr)1;
System.Diagnostics.Process.GetCurrentProcess().ProcessorAffinity = (IntPtr)2;

http://msdn.microsoft.com/zh-tw/library/……
[/Quote]
我查了一下,这是处理器的位掩码,用来指定我的线程在哪个cpu上运行,但是我的问题是为什么我可创建的线程数与cpu数量直接线性相关呢?
ZengHD 2010-11-22
  • 打赏
  • 举报
回复
System.Diagnostics.Process.GetCurrentProcess().ProcessorAffinity = (IntPtr)1;
System.Diagnostics.Process.GetCurrentProcess().ProcessorAffinity = (IntPtr)2;

http://msdn.microsoft.com/zh-tw/library/system.diagnostics.process.processoraffinity%28VS.80%29.aspx
musics52 2010-11-22
  • 打赏
  • 举报
回复
知道怎么解决吗?
呵呵
devin_jia 2010-11-22
  • 打赏
  • 举报
回复
5000汗

111,129

社区成员

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

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

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