采雷姆
Haskell流媒体库针对低CPU和GC开销进行了优化
动机
Zerem是一个Haskell库,为流数据问题提供了解决方案。 但是,与许多其他库不同,它需要进行一系列折衷。 它从一开始就专注于高性能,而不是针对库的可用性进行优化或提供最有用的功能。 让我们与两种替代策略进行比较,以了解Zerem的不同之处。
诸如Conduit之类的库以协程的思想为基础进行流式传输。 这提供了很大的灵活性。 例如,存在类似“双重消费者”( ZipSink )的概念。 使用monadic接口和yield / await原语构建更复杂的流式组件很方便。 但是,我们为此付出了代价:GHC无法轻松优化此类代码。 由于许多小对象的创建和销毁,最终导致垃圾回收的开销很高。 对于I / O绑定的任务,这通常很好,因为I / O使CPU压力小。 但是对于CPU限制的任务,Conduit并非入门者。 管道试图通过