gpt4 book ai didi

haskell - 如何提高Haskell IO的性能?

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

看来Haskell的IO比较慢。

例如,比较 Haskell 和 Python

#io.py
import sys
s=sys.stdin.read()
sys.stdout.write(s)

-- io.hs
main = do
s <- getContents
putStr s

它们的性能(gen.py 将 512k 数据写入 stdout):

Python 版本:

$ time python gen.py | python io.py > /dev/null

real 0m0.203s
user 0m0.015s
sys 0m0.000s

Haskell 版本:

$ time python gen.py | runhaskell io.hs > /dev/null

real 0m0.562s
user 0m0.015s
sys 0m0.000s

看来 Haskell 的要低得多。我的测试有问题吗?或者这只是 Haskell 固有的问题?

谢谢。

最佳答案

您的示例速度很慢,因为它使用带有 String-s 的惰性 IO。两者都有自己的管理费用。

特别是,String是一个Char-s的链接列表,因此每个字符有两个单词的空间开销(一个单词用于构造函数标记,一个单词用于构造函数标记)前向指针),每个字符至少占用一个字(缓存的低字符为一个字,未缓存的字符为三个字)。

使用字节或 unicode 数组输入的严格 IO 速度要快得多。尝试对以下内容进行基准测试:

import qualified Data.ByteString as B

main = B.putStr =<< B.getContents

或以下内容:

import qualified Data.Text as T
import qualified Data.Text.IO as T

main = T.putStr =<< T.getContents

关于haskell - 如何提高Haskell IO的性能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30816994/

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