저는 서비스로 일하기위한 연구 컴파일러 프로젝트를 진행하고 있습니다. 요구 사항 중 하나는 전화를 처리하는 동안 특정 사용자가 제한된 메모리 사용량을 가질 수 있습니다 (예 : "IP .b.c.d의 힙 메모리를 최대 30MB까지 사용할 수 있음").하스켈에서 함수/모나드/쓰레드 당 메모리 사용을 제한 할 수 있습니까?
C로 작성된 프로토 타입 구현은 직접 malloc
인 메모리 풀을 사용합니다 (실제로 유효한 형식으로 인해 올바르게 작성하기가 어렵습니다). 수동 메모리 관리.
함수, 모나드 또는 가벼운 스레드에서 힙 사용을 제한하여 Haskell에서이를 수행 할 수있는 방법이 있습니까? (나는 내가이 작업을 수행 할 수있는 다른 함수형 언어의 제안을 받아 들일 것입니다.) GHC의 최신 버전에서
정확히 무엇을 제한하려고합니까? 임의의 하스켈 코드에 대한 임의의 메모리를 제한하는 것은 가능하지 않을 수 있지만, 타입 클래스 뒤에 숨겨서 특정 리소스에 대한 액세스를 제한 할 수 있습니다. – Cirdec
운영 체제 프로세스의 메모리가 제한 될 수 있습니다. 한 가지 가능한 해결책은 새 프로세스를 포크하고 새로운 프로세스에 대한 ['setResourceLimit'] (https://hackage.haskell.org/package/unix-2.7.2.1/docs/System-Posix-Resource.html)과 [원격] (https://hackage.haskell.org/package/remote-0.1.1/docs/Remote.html)과 같은 것으로 통신하십시오. 새로운 프로세스에서 실행되는 코드를'IO()'보다 덜 강력한 것으로 제한해야 할 것이다. – Cirdec
그래, 그 컴파일 과정에 대한 전체적인 메모리 사용을 제한하려하고있다. 그것들은 정말로 비쌀 수 있습니다. 나는 힙 사용을 어떻게 든 제한하지 않으면 DoS에 취약 할 수 있습니다. – paulotorrens