gpt4 book ai didi

haskell - 惰性 I/O 有什么不好呢?

转载 作者:行者123 更新时间:2023-12-03 05:05:18 26 4
gpt4 key购买 nike

我通常听说生产代码应该避免使用惰性 I/O。我的问题是,为什么?除了闲逛之外,还可以使用 Lazy I/O 吗?是什么让替代方案(例如枚举器)更好?

最佳答案

惰性 IO 存在的问题是,释放您所获取的任何资源都有些不可预测,因为这取决于您的程序如何使用数据——它的“需求模式”。一旦您的程序删除对资源的最后一个引用,GC 最终将运行并释放该资源。

惰性流是一种非常方便的编程方式。这就是 shell 管道如此有趣和流行的原因。

但是,如果资源受到限制(例如在高性能场景中,或者期望扩展到机器极限的生产环境中),依靠 GC 进行清理可能并不能保证足够的效果。

有时您必须急切地释放资源,以提高可扩展性。

那么,惰性 IO 的替代方案是什么,但并不意味着放弃增量处理(这反过来会消耗太多资源)?好吧,我们有基于 foldl 的处理,又名迭代器或枚举器,由 Oleg Kiselyov in the late 2000s 引入。 ,并因许多基于网络的项目而普及。

我们不是将数据作为惰性流或在一个大批量中处理,而是对基于 block 的严格处理进行抽象,并在读取最后一个 block 后保证资源的最终确定。这就是基于迭代的编程的本质,并且提供了非常好的资源约束。

基于 iteratee 的 IO 的缺点是它有一个有点尴尬的编程模型(大致类似于基于事件的编程,而不是基于线程的控制)。对于任何编程语言来说,这绝对是一项先进技术。而且对于绝大多数编程问题来说,惰性IO是完全令人满意的。但是,如果您要打开许多文件,或在许多套接字上进行通信,或以其他方式同时使用许多资源,则迭代器(或枚举器)方法可能会有意义。

关于haskell - 惰性 I/O 有什么不好呢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5892653/

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