当前位置:  开发笔记 > 运维 > 正文

何时多线程不是一个好主意?

如何解决《何时多线程不是一个好主意?》经验,为你挑选了3个好方法。

我最近在开发一个通过以太网和串口发送和接收消息的应用程序.然后,我被要求添加对DIO离散度的监控.我通过,

"没有理由中断消息处理中涉及的主线程,我只是创建 另一个监视DIO的线程."

然而,这一决定被证明是不好的.有时,主线程将在发送和接收串行消息之间中断.这种中断会破坏时间,唉,消息会永远丢失.

我找到了另一种监控DIO 而不使用其他线程的方法,以太网和串行通信恢复了正常的功能.

然而,整个惨败让我思考.他们关于何时使用多线程的任何一般指导和/或任何人在使用多线程时是否有任何情况的例子都不是一个好主意?

**编辑:根据您的意见,在为互联网提供信息后,我写了一篇博文,题为" 多线程何时不是一个好主意?



1> SpoiledTechi..:

    在单处理器计算机和桌面应用程序上,您使用多线程,因此您不会冻结应用程序,而是真正的其他任何东西.

    在单处理器服务器和基于Web的应用程序上,不需要多线程,因为Web服务器处理大部分内容.

    在多处理器计算机和桌面应用程序上,建议您使用多线程和并行编程.制作与处理器一样多的线程.

    在多处理器服务器和基于Web的应用程序上,不再需要多线程,因为Web服务器会处理它.

总的来说,如果您使用多个线程而不是冻结桌面应用程序和任何其他通用答案,那么如果由于线程相互中断而导致您拥有单个核心计算机,则会使应用程序变慢.

为什么?因为硬件开关.硬件总是在线程之间切换需要时间.在一个多核盒子上,继续为每个核心使用1个线程,你会看到一个提升.


有很多例子说明何时不进行多线程处理,但这不是一个好的列表.1)因此应用程序不冻结是一个合法的原因.2)Web服务器为每个请求生成1个线程.这并不意味着他们会为您处理多线程.这就是说,Windows为每个应用程序生成1个线程,因此它会为您处理它.3)3是使用多线程的原因4)与2相同摘要完全错误.即使您有一个处理器,如果一个线程正在等待磁盘I/O,则第二个线程可以继续工作.

2> Thomee..:

用一句旧话来解释:程序员遇到了问题.他想,"我知道,我会使用线程." 现在程序员有两个问题.(通常归因于JWZ,但似乎早于他使用它来谈论正则表达式.)

一个好的经验法则是"不要使用线程,除非有一个非常令人信服的理由使用线程." 多线程都在寻找麻烦.尝试在不使用多个线程的情况下找到解决问题的好方法,并且只有在避免使用线程时才会使用线程,这与使用线程的额外工作一样麻烦.此外,如果您在多核/多CPU计算机上运行,​​请考虑切换到多个线程,单线程版本的性能测试表明您需要额外核心的性能.


就像我说的那样,虽然经常归因于JWZ,但引用本身已经存在了更长时间,而且在使用JWZ之前并不是关于正则表达式.鉴于引用的历史,我认为它仍然是一个有效的释义.我并不打算声称JWZ正在谈论线程的问题.正如我所看到的那样,引用的是关于某人采用一种很酷的工具并试图将其应用于过多的一系列问题,并创造出比他们解决的更多挑战.

3> Adam Liss..:

如果出现以下情况,多线程是一个坏主意:

几个线程访问和更新相同的资源(设置变量,写入文件),并且您不了解线程安全性.

几个线程相互交互,您不了解互斥体和类似的线程管理工具.

您的程序使用静态变量(线程通常默认共享它们).

您尚未调试并发问题.


我认为可以肯定地说,如果你不知道如何多线程,那么多线程你的应用程序并不是一个好主意.
推荐阅读
wangtao
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有