线程最佳实践

2023-12-22

我从事的许多项目的线程实现都很差,而我就是必须追踪这些问题的傻瓜。是否有公认的最佳方法来处理线程。我的代码总是等待一个永远不会触发的事件。

我有点像设计模式之类的想法。


(假设 .NET;类似的事情也适用于其他平台。)

嗯,有lots需要考虑的事情。我建议:

  • 不变性对于多线程来说非常有用。函数式编程能够很好地并发执行,部分原因在于强调不变性。
  • 当您访问可变共享数据(读取和写入)时,请使用锁。
  • 除非确实必要,否则不要尝试无锁。锁很昂贵,但很少成为瓶颈。
  • Monitor.Wait应该差不多always成为条件循环的一部分,等待条件变为真,如果不成立则再次等待。
  • 尽量避免持有锁的时间超过您需要的时间。
  • 如果您需要一次获取两个锁,请彻底记录顺序并确保始终使用相同的顺序。
  • 记录您的类型的线程安全性。大多数类型don't需要是线程安全的,它们只需要不具有线程敌对性(即“您可以从多个线程使用它们,但它是your如果您想共享锁,则有责任取出锁)
  • 不要从非 UI 线程访问 UI(除非以已记录的线程安全方式)。在 Windows 窗体中,使用 Control.Invoke/BeginInvoke

这超出了我的想象——如果这对你有用,我可能会想到更多,但如果对你没有用,我就到此为止。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

线程最佳实践 的相关文章

  • Web 应用程序似乎启动了名为 [22] 的线程,但未能停止它。这很可能造成内存泄漏

    我有一个 Web 应用程序 后端有 Servlet 部署在 tomcat 上 该应用程序是简单的java应用程序 我经常在服务器日志中看到此错误 严重 Web 应用程序似乎启动了一个名为 22 但未能阻止它 这很有可能 造成内存泄漏 是否存
  • Android 广告性能非常慢

    我一直在我的 Android 应用程序上尝试横幅广告 如下this https developers google com admob android quick start指导 当广告加载并呈现时 观察到 FPS 显着下降 这对于用户来说
  • 使用 Thread.sleep 线程休眠时的 CPU 消耗

    我有一个服务器程序 它会轮询数据库以获取新请求 我希望以 1 分钟的间隔进行轮询 因此 我在程序 while 循环中设置了 Thread sleep 问题是 只要该程序应该 睡眠 CPU 消耗就会急剧上升 即大约 25 30 矛盾的是 当程
  • NSCondition 是如何工作的?

    我在这个意义上使用 NSCondition 类 void method1 cocoaCondition lock lock while someCheckIsTrue cocoaCondition wait Do something coc
  • 线程安全区域设置技术

    我们目前正在编写一个基于线程 python Web 服务器框架 cherrypy 的 Web 应用程序 并希望同时支持来自多个区域设置的用户 区域设置模块似乎不是线程安全的 是否有第三方库或模块以线程安全的方式提供区域设置解析和格式化功能
  • 在消费者循环中重用 unique_lock

    我在 Bjarne Stroustrup 的 C 编程语言 第 4 版 第 119 页中偶然发现了以下代码 queue
  • Windows 上多线程文件 IO 的 SHARING_VIOLATION

    我有一些类似于这个最小复制示例的代码 真实版本生成一些代码并编译它 include
  • 如何使用 Java 多线程读取多个文件? [关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 我想读取和解析很多文件 由于有超过 10000 个文件需要解析 我想通过使用线程来加快这个过程 例如 如果我有5个线程 我想让它们都同时读取
  • 等待回调完成的最佳方法

    在下面的代码中 main 函数调用request 函数 该函数内部调用th request async 函数 其中mm th done cb 仅在执行 mm th done cb 后 在 main 中继续进行的最佳且有效的方法是什么 虚拟代
  • 如何在 Java 中的新进程中启动“主进程”?

    问题很简单 如何在另一个java进程中启动main方法 现在我这样做 startOptions new String java jar serverstart jar new ProcessBuilder startOptions star
  • 使用 Gridbaglayout 时的动画。

    我最近开始学习 Java 想知道是否可以在使用 GridBag 布局的同时制作动画 这些可能吗 如何实现 任何教程 帮助等将不胜感激 为了执行这种性质的任何类型的动画 您将需要某种代理布局管理器 它需要确定所有组件的当前位置 即布局管理器希
  • “原子”系统调用是什么意思?

    我知道atomic通常在以下上 下文中使用竞争条件意思是类似一致性 and 根据多线程 多处理环境确定结果 没关系 但最近我读到了Linux中的原子系统调用 但不明白什么是atomic实际上这里的意思是 即how this 原子性 is 实
  • Python 多处理进程在一段时间后休眠

    我有一个脚本 它运行一个目录 并搜索具有给定结尾 即 xml 的所有文件以查找给定字符串并替换它们 为了实现这一点 我使用了 python 多处理库 作为示例 我使用 1100 个 xml 文件 其中包含大约 200MB 的数据 在我的 M
  • 在单独的线程中从服务获取 AutoCompleteTextView 建议

    For my AutoCompleteTextView我需要从网络服务获取数据 由于这可能需要一点时间 我不希望 UI 线程没有响应 因此我需要以某种方式在单独的线程中获取数据 例如 从 SQLite DB 获取数据时 使用以下命令非常容易
  • 在多线程场景中正确锁定 List

    好吧 我只是无法正确理解多线程场景 抱歉再次问类似的问题 我只是在互联网上看到许多不同的 事实 public static class MyClass private static List
  • 如何防止 Parallel.ForEach 循环在运行时更改任务数量?

    我正在使用Parallel ForEach循环做一些工作 我用localInit像这样 localInit gt new foo new Foo bars CreateBars 根据文档 https learn microsoft com
  • 多个用户级线程堆栈的内存

    我想了解用户级线程堆栈的内存如何保存在内存中 我认为所有堆栈都会从页面边界开始 我是对的吗 用户级线程库如何确保某个线程的堆栈不会增长并与其他线程的连续页面边界堆栈重叠 因为所有堆栈页面都是连续的 如果您坚持使用连续的堆栈 那么是的 为单独
  • 应用程序需要很长时间才能同步线程(或根本不同步)

    我在 Delphi XE5 iOS 和 Android 中使用 REST 组件 我目前正在通过 iOS 模拟器进行测试 我的应用程序often挂在我的代码中的以下行 R Request Execute 经过一些调试后 我发现它特别挂在 RE
  • XamlReader.Load 在后台线程中。是否可以?

    WPF 应用程序具有从单独的文件加载用户控件的操作 使用XamlReader Load method StreamReader mysr new StreamReader pathToFile DependencyObject rootOb
  • 线程和 fork()。我该如何处理呢? [复制]

    这个问题在这里已经有答案了 可能的重复 多线程程序中的fork https stackoverflow com questions 1235516 fork in multi threaded program 如果我有一个使用 fork 的

随机推荐

  • 使用Python从设备获取MAC地址

    我正在寻找一种方法 使用python 来获取layer II来自我本地网络上的设备的地址 Layer III地址是已知的 目标是构建一个脚本 定期轮询 IP 地址数据库 确保 MAC 地址没有更改 如果更改 则通过电子邮件向我发出警报 使用
  • 嵌入带有参数的 svg 对象

    谁有想法或提示 我想在 die svg 标签中嵌入一个 svg 对象并更改此参数 HTML SVG 未进行
  • 如何使用 Javascript 截断/切片/修剪字符串中的最后一个字符?

    我有一根绳子 12345 00 我希望它返回12345 0 我看过trim 但看起来它只是修剪空白并且slice我不明白这是如何运作的 有什么建议么 您可以使用子串 https developer mozilla org en US doc
  • 在 SQL Server 2008 R2 脚本向导中缺少脚本数据

    在我的 SQL Server 2008 R2 中 脚本向导的脚本选项屏幕在 表 视图选项 部分下查找我找到 脚本数据 行并希望将该选项设置为 True 但失败了 我没有找到任何脚本数据选项 为什么我的 SQL Server 2008 R2
  • PHP检查文件是否为音频文件

    我正在编写代码来上传音频文件 可以是任何格式 mp3 mp4 wav 等等 我不想编写所有 mime 类型的所有条件 然后检查上传的文件以验证 mime 类型 因为 我想接受所有音频文件 不仅仅是一两种格式 那么 有没有什么简单的方法来检查
  • Ionic 2 存储在卸载时不会清理 - 仅适用于已签名的 APK

    我正在使用 Ionic 2 存储来存储用户凭据 卸载应用程序时 存储不会清除 因此重新安装后 应用程序将获取先前用户的用户凭据 此问题仅发生在签名的 APK 中 在 Samsung on7 和 lenovo vivi 型号上进行了测试 卸载
  • iOS如何根据其中的UILabel制作UIView的动态宽度/自动布局

    我可能正在努力解决一些菜鸟问题 我有一个UIView其中我显示一些价格 我想要UIView根据价格具有动态宽度 如果是 1 欧元 那么它将是例如20pt 如果是 2300 欧元 那么就会像50pt宽度 我试图利用故事板的限制 但没有成功 是
  • Spring 和 /* url 模式

    我们有一个 的 url 模式并且请求到达我们的控制器 但我们总是得到 404 这是我们的 web xml
  • 谷歌面积图线下可变不透明度?

    我正在使用谷歌图表中的面积图 我想知道是否有办法设置每条线的不透明度 看这个例子 https developers google com chart interactive docs gallery areachart hl nl Simp
  • 如果参数为 NULL,如何从 WHERE 子句中删除条件

    我将 2 个参数传递给 PL pgSQL 函数 这是查询 SELECT FROM table WHERE col1 param1 AND col2 param2 两个参数都可以为 NULL 在这种情况下 应从WHERE clause 我怎样
  • 带 2 个按钮的警报

    我将在我的应用程序中添加一个指向网站的链接 用户将单击一个显示 网站 的按钮 然后将出现一个带有 2 个按钮的警报 其中一个按钮只是取消按钮 另一个按钮将打开网站 你能帮我解决这个问题吗 Thanks 将其放入您的头文件中 interfac
  • 使用互斥锁时尝试引用已删除的函数

    我在处理项目时遇到奇怪的错误 我创建了一个超级简单的示例来重现错误 我创建了一个类 我想在这个类中做的是为我的类提供一种 getter 函数来填充 a 的值struct 在主应用程序中 用户将实例化这个struct 将其传递给成员函数 并能
  • Z3 Solver Java API:意外行为

    通过向求解器添加条件 我想使用 solver check 检查是否存在解 因此 我创建了一个简单的示例来寻找 t1 的解决方案 我知道 t1 有一个解 即 t1 0 然而 求解器的状态不是 SATISFIABLE public static
  • 将 base64 字符串转换为与 OpenCV 兼容的图像

    我正在尝试将 JPEG 的 Base64 表示形式转换为可与 OpenCV 一起使用的图像 问题是我希望能够做到这一点而不必物理保存照片 我希望它保留在内存中 有更新的方法来实现这一点吗 我正在使用 python 3 6 2 和 OpenC
  • ZMQ套接字连接超时

    我正在使用 ZMQ cppzmq 的 C 绑定 并且尝试使用以下命令设置 TCP 套接字的连接超时 setsockopt 这样的方法 int connectTimeout 1000 socket setsockopt ZMQ CONNECT
  • 替换对shared_ptr中对象的所有引用

    是否可以替换shared ptr的多个实例引用的对象 可能我不太清楚 我举个例子 shared ptr a new Derived1 auto b a auto c b This function replaces the object w
  • TypeError 对象不可迭代

    当尝试循环 Django 模板中的变量时 出现以下错误 有问题的变量是我的 DetailView 子类中指定的模型的相关对象 类型错误位于 en applicants 50771459778 Householdmember 对象不可迭代 这
  • 如何在 PHP 中通过 cURL 发送 XML 和其他 post 参数

    我使用下面的代码将 XML 发送到我的 REST API xml string data 包含正确的 XML 并且它很好地传递到 mypi php set POST variables url http www server cu mypi
  • 解释器关闭时线程化导入

    蟒蛇的threading文档 http docs python org dev library threading html importing in threaded code states 所有导入尝试必须在解释器启动之前完成 自行关闭
  • 线程最佳实践

    我从事的许多项目的线程实现都很差 而我就是必须追踪这些问题的傻瓜 是否有公认的最佳方法来处理线程 我的代码总是等待一个永远不会触发的事件 我有点像设计模式之类的想法 假设 NET 类似的事情也适用于其他平台 嗯 有lots需要考虑的事情 我