Я написал небольшую программу, что-то вроде специализированного HTTP-сервера на Haskell, которая ненамного сложнее, чем приведенный ниже код. Что меня озадачивает, так это потребление памяти. Скажем, когда я запускаю тест, скомпилированный из прилагаемого кода, и делаю несколько POST-запросов, содержащих до 20 МБ тела, вся программа будет иметь размер виртуальной машины ~ 800 МБ, и это звучит странно. И это пространство не возвращается системе, если я оставлю экземпляр такой программы бездействующим.
Что это значит?
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