erlang 공부

     

     

    Erlang에서의 프로세스

    • 프로세스는 함수에 불과함. 
    • 프로세스는 함수를 실행하고, 함수가 끝나면 사라짐. 
    • 프로세스는 단순한 함수이지만, '메세지 사서함' 같은 숨겨진 상태도 있음. 

     



    새 프로세스를 시작하기 위해 Erlang은 단일 함수를 가져와 실행하는 함수 spawn/1을 제공합니다:

     

     

     

     

     

     

    # SMP 24개 사용
    PS C:\dev\rebar\myapp\src> erl +S 24
    Erlang/OTP 26 [erts-14.1] [source] [64-bit] [smp:24:12] [ds:12:12:10] [async-threads:1] [jit:ns]
    
    # SMP 기본값
    PS C:\dev\rebar\myapp\src> erl
    Erlang/OTP 26 [erts-14.1] [source] [64-bit] [smp:12:12] [ds:12:12:10] [async-threads:1] [jit:ns]
    
    
    
    # SMP 5개만 사용
    PS C:\dev\rebar\myapp\src> erl +S 5
    Erlang/OTP 26 [erts-14.1] [source] [64-bit] [smp:5:5] [ds:5:5:10] [async-threads:1] [jit:ns]
    
    # SMP 1개만 사용
    PS C:\dev\rebar\myapp\src> erl +S 1        
    Erlang/OTP 26 [erts-14.1] [source] [64-bit] [smp:1:1] [ds:1:1:10] [async-threads:1] [jit:ns]

     

     

    • [smp:5:5]: Symmetric Multiprocessing을 지원하며, 시스템에는 5개의 Erlang 스케줄러가 있고 모두 활성화되어 있다는 것을 나타냅니다. 스케줄러는 동시에 실행될 수 있는 Erlang 프로세스를 관리합니다.
    • [ds:5:5:10]: Dirty Scheduler를 가리키는데, 이는 Erlang 가상 머신이 I/O와 같은 잠재적으로 시간이 오래 걸리는 작업을 처리하기 위해 사용하는 특별한 스케줄러입니다. 여기서 5:5:10은 각각 CPU와 I/O 작업을 위한 dirty scheduler의 수를 나타냅니다.
    • [async-threads:1]: 비동기 스레드의 수를 나타내며, 이 스레드는 비동기적 I/O 작업에 사용됩니다.
    • [jit:ns]: Just-In-Time 컴파일러의 사용 여부를 나타냅니다. ns는 "no support"를 의미하는데, 이는 현재 버전의 Erlang/OTP에서는 JIT 컴파일러가 활성화되어 있지 않다는 것을 의미합니다.

    네, 맞습니다. [smp:2:2]는 Erlang 시스템이 Symmetric Multiprocessing (SMP) 모드에서 실행되고 있음을 나타내며, 시스템에 2개의 물리적 혹은 논리적 CPU 코어가 사용 가능하고, Erlang 가상 머신에서도 2개의 스케줄러(프로세스를 관리하는 Erlang VM의 일부)가 활성화되어 있다는 것을 의미합니다. 각 스케줄러는 CPU 코어 하나에 대응하여 Erlang 프로세스들을 병렬로 실행할 수 있게 해 줍니다.

    Erlang 시스템에서는 일반적으로 각 CPU 코어에 대해 하나의 스케줄러를 할당하는 것이 기본 설정입니다. 따라서 [smp:2:2]는 Erlang 시스템이 두 코어를 효율적으로 사용할 수 있도록 설정되어 있다는 것을 나타내며, 이를 통해 동시에 여러 작업을 수행할 수 있는 병렬 처리 능력을 갖추고 있음을 의미합니다.

     

     

     

     

    네, 맞습니다. [smp:2:2]는 Erlang 시스템이 Symmetric Multiprocessing (SMP) 모드에서 실행되고 있음을 나타내며, 시스템에 2개의 물리적 혹은 논리적 CPU 코어가 사용 가능하고, Erlang 가상 머신에서도 2개의 스케줄러(프로세스를 관리하는 Erlang VM의 일부)가 활성화되어 있다는 것을 의미합니다. 각 스케줄러는 CPU 코어 하나에 대응하여 Erlang 프로세스들을 병렬로 실행할 수 있게 해 줍니다.

    Erlang 시스템에서는 일반적으로 각 CPU 코어에 대해 하나의 스케줄러를 할당하는 것이 기본 설정입니다. 따라서 [smp:2:2]는 Erlang 시스템이 두 코어를 효율적으로 사용할 수 있도록 설정되어 있다는 것을 나타내며, 이를 통해 동시에 여러 작업을 수행할 수 있는 병렬 처리 능력을 갖추고 있음을 의미합니다.

     

     

    https://learnyousomeerlang.com/the-hitchhikers-guide-to-concurrency#dont-panic

    [smp:24:12]는 논리적 코어가 24개, 실제 VM 스케쥴러가 12개라는 뜻임. 

     

     

     


    erlang에서 프로세스 메세지 전송하기

    # 나에게 'hello'라고 보내기
    self() ! hello
    • erlang의 프로세스끼리는 '메세지'를 전송할 수 있으며, 전송된 메세지는 프로세스의 '메일박스'에 저장됨. 
    • 다른 프로세스에게 '메세지'를 전송하는 방법은 위 코드와 같음.
    flush().
    >>> 
    Shell got hello
    Shell got hello
    Shell got hello
    • 보낸 메세지가 잘 도착했는지는 flush()를 이용해서 확인할 수 있음. 
    • 그러나 이 기능은 단순히 Printing 하는 역할을 함. 

     

     

    erlang에서 프로세스에 메세지를 전송하고, 읽기

     

     

     

     

    댓글

    Designed by JB FACTORY