可以通过多线程修复的低性能示例

Posted

技术标签:

【中文标题】可以通过多线程修复的低性能示例【英文标题】:Examples of poor performance that could be fixed by multithreading 【发布时间】:2011-04-19 02:34:41 【问题描述】:

这是一个相当宽泛的问题,但我是一名初学者和中级程序员,刚刚完成了一个应用程序课程,其中一个主题是多线程。我们完成了各种家庭作业,包括制作带有按钮的 GUI,这些按钮将启动一些冗长的过程(从数据库中读取等)。

在这些情况下,我们将创建单线程和多线程版本,其中执行处理的任务与其他所有任务都在一个单独的线程上,以便在按下按钮时应用程序不会停止。

我的问题:

今天上班时,我在我的 MS Outlook 中搜索了一个特定的单词,希望能找到一封特定的电子邮件;不幸的是,这个词很常见,一亿封电子邮件出现了。有一个停止按钮,但按下它完全没有任何作用......

根据我的课堂经验,这不是将搜索过程放在自己的线程上不会导致上述问题的示例吗?微软肯定不会做那样的傻事……有没有理由不把它做成自己的线程?如果它是它自己的线程,那么为什么应用程序会停止并且不响应点击停止按钮? (操作系统相关的原因?)。

所有这些都是在 Windows XP 32 位双核系统上进行的,如果相关的话。

真的,我只是想更好地了解多线程在何处发挥作用以及如何学习在何处应用它。是否有任何知名应用程序明显受益或受益于多线程的示例?真的能分得清吗?

谢谢!

R

【问题讨论】:

【参考方案1】:

很有可能搜索确实是在另一个线程中进行的,但是将结果传递给主线程并绘制它们实际上使主线程陷入了困境,以至于它没有时间响应您的请求.

对于此类问题,我知道的唯一解决方法是限制搜索过程可以返回的结果数量。如果您不想限制结果的数量,请在不同的线程中绘制消息窗格。然而,这非常困难,因为大多数 gui 工具包都是单线程的。此外,即便如此,线程也可能(在极端情况下)占用大量内存,从而减慢主 gui 的速度。

【讨论】:

【参考方案2】:

每当您看到应用程序的启动画面时,这都是一个重要的指标,表明某个单独的线程正在发生某些事情。

这更多是为了美观,但它有助于用户了解在后台加载进程时机器不会卡住。

【讨论】:

以上是关于可以通过多线程修复的低性能示例的主要内容,如果未能解决你的问题,请参考以下文章

多线程--锁

Win32 多线程资源

Windows 上 localtime_s() 多线程性能不佳的解决方法

Java多线程性能优化

python-协程多线程多进程性能比较

新赛季多线程技术开放机型,优化团战帧率!26个BUG修复