【问题标题】:vb.net : How many threads is it safe to open at once?vb.net:一次打开多少个线程是安全的?
【发布时间】:2014-01-06 18:19:36
【问题描述】:

在我的应用程序等待结果时,我正在运行后台工作人员为我做一些处理。我目前一次只使用一个,但我想运行更多。多跑安全吗?我能跑几个?用户拥有多少 RAM 是否重要,还是更多的是控制线程运行时间的处理器?

谢谢

我的代码:

Private check_config_bw As BackgroundWorker = New BackgroundWorker
check_config_bw.WorkerReportsProgress = True
check_config_bw.WorkerSupportsCancellation = True
AddHandler check_config_bw.DoWork, AddressOf check_config_bw_DoWork
AddHandler check_config_bw.ProgressChanged, AddressOf check_config_bw_ProgressChanged
AddHandler check_config_bw.RunWorkerCompleted, AddressOf check_config_bw_RunWorkerCompleted

If Not check_config_bw.IsBusy = True Then
     check_config_bw.RunWorkerAsync()
End If

【问题讨论】:

标签: vb.net multithreading


【解决方案1】:

我记得在某处读过一个线程占用 1-2MB 内存 + 无论你在其中声明什么,CPU 都取决于你用它做什么。打开很多它们是安全的,但只使用 x2 数量的内核是有意义的(再次看到这种模式经常使用)。

您可以执行自己的性能测试并亲自查看。 CPU profiler 工具包含在 Visual Studio 中,在识别性能瓶颈方面非常有效(一直使用它)。

【讨论】:

  • 但我不知道用户会有多少个内核。这个应用要卖给别人,所以我不能像我自己一样控制用户环境。
  • 我从未见过 CPU 分析器工具。我得调查一下。
  • @user2721815:您可以查询操作系统的内核数。看到这个:stackoverflow.com/questions/1542213/… 还要检查我的编辑,了解 2010 年在哪里可以找到探查器。
  • @user2721815:这很不幸。那么,请检查您的其他选项:stackoverflow.com/questions/3927/…
  • @Neolisk 感谢您提供有关性能向导的良好链接和信息。
【解决方案2】:

您可以根据需要打开任意数量的线程,但请始终注意系统资源。每个线程默认使用 1MB 堆栈空间。同样拥有“太多”线程可能会导致过多的上下文切换,这意味着花费在线程内务处理上的时间比实际处理要多。操作系统控制实际的线程(上下文切换、调度、线程优先级、线程数量等)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多