루틴은 두 언어 모두에서 저렴합니다.: 각 고루틴은 2KB이고 Elixir 프로세스는 각각 0.5KB입니다.
프로세스를 시작하는 것을 이해합니다.빔0.5KB의 메모리가 필요합니다. 이 경우에는 너무 가벼워요만병 통치약그리고 Erlang, 그리고 그 정도는 덜하지만가다이는 그다지 저렴하지 않은 자체 프로세스 및 스레드에 의존하는 다른 언어에 비해 이러한 런타임을 사용하는 이점인 것 같습니다.기본 운영 체제에서프로세스 및 스레드(아마도 더 많은 메모리가 필요함)
Linux 기반 시스템에서 프로세스를 시작하는 데 필요한 메모리 양을 알고 싶습니다. 나는 메모리 사용량이 프로세스가 수행하는 작업에 따라 다르다는 것을 이해합니다. 하지만 아무 작업도 수행하지 않는 프로세스를 시작하는 것에는 메모리 비용이 발생한다고 생각합니다. 비용은 얼마인가요?
이에 대한 자세한 내용은 어디에서 확인할 수 있나요? 이를 확인하는 데 사용할 수 있는 파일/명령이 있습니까?
답변1
task_struct
Linux에서는 모든 스레드나 프로세스가 내 시스템의 커널에서 최소 1바이트의 비용을 발생시키며 pahole task_struct
이는 9,344바이트가 필요하다고 알려줍니다. 사용자 공간에서 스레드에는 스택도 할당되어야 하지만 실제 비용은 실제로 사용하는 스택 공간의 양에 따라 달라집니다(터치된 페이지만 할당되므로).
다음 샘플 프로그램을 사용할 수 있습니다man pthread_attr_init
그리고pthread_create
. 후자를 사용하면 스택 크기와 생성된 스레드 수를 제어할 수 있습니다. 즉, 사용자 공간에서 단일 스레드의 비용을 실행하고 사용하는 메모리 양을 측정하여 추정할 수 있습니다. GNU는 많은 수의 실행에 대한 평균을 계산하여 time
이 특정 시나리오에서 스택 크기가 64KiB인 스레드당 48KiB의 페널티를 권장합니다.
포크에는 프로세스를 위한 새로운 주소 공간은 물론 커널 및 페이지 테이블 항목의 관련 구조를 생성하는 작업이 포함되므로 비용이 더 많이 듭니다.