【问题标题】:Fastest synchronisation最快同步
【发布时间】:2010-02-19 05:27:57
【问题描述】:

我有以下情况:
该程序有一个读取器和一个写入器线程到一个外部应用程序的套接字。 读者和作者需要在协调的循环中工作。
写入器向套接字发送动态数量的消息 (x),读取器需要从套接字读取响应。每个周期的消息数量超过 5 到 10k。消息的接收顺序与发送的顺序不同,并且消息布局清晰,因此可以确定单个消息。
读者需要阅读 x 条消息,然后在 .阅读器完成读后处理后,作者需要重新开始向套接字发送。
从你的 pov 中最快的同步是什么?

  • 使用 书面信息的数量? (即使套接字上没有 FIFO 保证)
  • 使用经典的锁定对象?
  • 对具有写入消息数量的整数使用原子事务,并让编写者只更新一次整数?

    我是否错过了任何其他快速同步机制?

【问题讨论】:

  • 消息需要按顺序处理吗?前 x 条消息是否会影响接下来的 x 条消息?您确定一条消息在哪里结束和下一条消息从哪里开始的机制是什么?
  • 我已经避免了任何其他共享状态——因此作者需要开始一个循环,而读者需要结束一个循环。其他依赖项不共享。我觉得我需要编写一些性能测试代码,这些代码将与手工制作的模拟对象一起处理套接字通信,但也许还有其他同步的想法。

标签: c# performance multithreading synchronisation


【解决方案1】:

除非您以每秒 100,000 次的速度执行此操作,否则哪种机制比另一种快几微秒并不重要。只需使用最容易理解和/或开始工作的任何机制。然后仅在结果不够快时才考虑优化机制。消息处理本身很可能会比同步使用多几个数量级的时间。

【讨论】:

  • 没错!我也想说同样的话:)
  • 我在制定我的问题时表现不佳 - 每次阅读后都需要检查同步。因此每秒几千次,实际的周期/状态变化仅每 1-2 秒发生一次。
猜你喜欢
  • 1970-01-01
  • 2017-01-02
  • 1970-01-01
  • 2021-03-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-01-05
相关资源
最近更新 更多