Cod*_*nts 26 language-agnostic multithreading
我最近在开发一个通过以太网和串口发送和接收消息的应用程序.然后,我被要求添加对DIO离散度的监控.我通过,
"没有理由中断消息处理中涉及的主线程,我只是创建 另一个监视DIO的线程."
然而,这一决定被证明是不好的.有时,主线程将在发送和接收串行消息之间中断.这种中断会破坏时间,唉,消息会永远丢失.
我找到了另一种监控DIO 而不使用其他线程的方法,以太网和串行通信恢复了正常的功能.
然而,整个惨败让我思考.他们关于何时不使用多线程的任何一般指导和/或任何人在使用多线程时是否有任何情况的例子都不是一个好主意?
**编辑:根据您的意见,在为互联网提供信息后,我写了一篇博文,题为" 多线程何时不是一个好主意?
Spo*_*com 13
总的来说,如果您使用多个线程而不是冻结桌面应用程序和任何其他通用答案,那么如果由于线程相互中断而导致您拥有单个核心计算机,则会使应用程序变慢.
为什么?因为硬件开关.硬件总是在线程之间切换需要时间.在一个多核盒子上,继续为每个核心使用1个线程,你会看到一个提升.
用一句旧话来解释:程序员遇到了问题.他想,"我知道,我会使用线程." 现在程序员有两个问题.(通常归因于JWZ,但似乎早于他使用它来谈论正则表达式.)
一个好的经验法则是"不要使用线程,除非有一个非常令人信服的理由使用线程." 多线程都在寻找麻烦.尝试在不使用多个线程的情况下找到解决问题的好方法,并且只有在避免使用线程时才会使用线程,这与使用线程的额外工作一样麻烦.此外,如果您在多核/多CPU计算机上运行,请考虑切换到多个线程,单线程版本的性能测试表明您需要额外核心的性能.
实际上,多线程不可扩展并且难以调试,因此如果可以避免的话,无论如何都不应该使用它。在少数情况下,它是强制性的:当多 CPU 上的性能很重要时,或者当您处理的服务器有很多客户端需要很长时间才能响应时。
在任何其他情况下,您可以使用替代方案,例如队列 + cron 作业或其他。