gpt4 book ai didi

multithreading - Haskell中多个线程的高性能唯一时间戳ID

转载 作者:行者123 更新时间:2023-12-04 15:14:39 27 4
gpt4 key购买 nike

我有多个线程处理事件。我想为每个事件分配一个纳秒时间戳。不过,它必须是唯一的 id。因此,在两个事件到达的奇怪情况下,它们将被分配相同的时间戳,我希望其中一个事件增加一纳秒。鉴于真正的精度不在纳秒级,就系统的时间戳性质而言,这是可以的。

在一个线程中,这是一个微不足道的问题。但是跨多个线程,它变得更具挑战性。性能绝对是至关重要的,因此在典型的 id 生成器类型上天真地同步的想法似乎会阻塞太多。

有没有一些方法可以用最少或没有锁定来解决这个问题?

最佳答案

为什么不将时间戳和唯一 ID 生成的问题分开呢?例如,标准模块 Data.Unique ,它在 IO 中提供全局唯一值并且对于大多数用途来说应该足够快。或者,如果您需要更高级的东西,concurrent-supply包提供具有纯接口(interface)的高性能、并发唯一 ID 供应。

也就是说,您可能可以使用 POSIX monotonic clock为此,使用例如clock包裹:

import Control.Monad
import qualified System.Posix.Clock as Clock

main :: IO ()
main = replicateM_ 100 $ do
time <- Clock.getTime Clock.Monotonic
print (Clock.sec time, Clock.nsec time)

关于multithreading - Haskell中多个线程的高性能唯一时间戳ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9051562/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com