我在 haskell 中编写了一个小程序,一种专门的 HTTP 服务器,它并不比下面的代码复杂多少。令我困惑的是它的内存消耗。比如说,当我运行从随附代码编译的测试并发出几个包含高达 20Mb 主体的 POST 请求时,整个程序的 VM 大小约为 800Mb,这听起来很奇怪。如果我让此类程序的实例处于空闲状态,则此空间不会返回系统。
这是什么意思?
import System.IO
import Network.HTTP.Server
import Network.Socket
import Network.URL
handler :: SockAddr -> URL -> Request String -> IO (Response String)
handler sa url rq = do
writeFile "/tmp/out" (rqBody rq)
return $ insertHeader HdrContentLength "0" (respond OK :: Response String)
main = serverWith defaultConfig {srvPort = 2121} handler