Como limitar o uso de memória de threads Haskell
Em um programa Haskell compilado com o GHC, é possível proteger programaticamente contra o uso excessivo de memória? Ou seja, notifique o programa quando o uso da memória atingir um limite especificado, indicando de preferência o encadeamento incorret
Por exemplo, suponha que eu queira escrever um servidor, hospedando um intérprete de linguagem de script, ao qual os usuários possam se conectar. É Turing-completo, para que os programas possam teoricamente usar memória ou tempo ilimitados. Suponha que cada cliente seja tratado com um thread separado. Se um cliente gravar um loop infinito que consome memória muito rapidamente, quero garantir que o encadeamento consuma não mais do que, digamos, 1 MB de memória, antes de ser alertado com uma exceção. Não quero que outros usuários sejam afetados quando isso acontece
Provavelmente é possível usando processos separados eulimit
, mas
Prefiro mantê-lo em um programa, para evitar a complexidade da comunicação entre processo
Eu preciso dar suporte ao Linux e ao Windows, então prefiro mantê-lo independente da plataforma, se possíve