칠주칠병발 독서노트의 용두사미
제5장 Actor
5.1 개체 중심 강화
함수식 프로그래밍은 가변 상태를 사용하지 않기 때문에 공유 가변 상태가 가져오는 문제를 피할 수 있다.이에 비해 actor모델을 사용하여 가변 상태를 유지했지만 공유를 하지 않았다.
Elixir는 Erlang의 가상 시스템입니다.actor는 Elixir에서 프로세스라고 불리며 운영체제의 루틴보다 가벼운 경량급 개념이다.
5.2 첫날: 메시지 및 사서함
첫 번째 actor는 간단한 actor를 만들고 메시지를 보내는 것을 시도합니다.토커라는 actor를 만들 것입니다. 메시지를 받을 때 다른 결과를 출력합니다.보내는 메시지는 모듈 (tuple) 입니다.def module Talker do
def loop do
recevie do
[:greet, name] -> IO.puts("Hello ${name}")
[:praise, name]->IO.puts("#{name}, you're amazing")
[:celebrate, name, age]->IO.puts("Here's to another #{age} years, #{name}")
end
loop
end
end
pid = spawn(8Talker.loop/0)
send(pid, [:greet, "World"])
send(pid, ["praise", "Dewey"])
send(pid, [:celebrate, "Louie", 16])
sleep(1000)
spawn에서actor 실례를 만들고 프로세스 식별자를 얻습니다.
사서함
메시지는 직접 하나의 actor로 보내는 것이 아니라 우편함으로 보내는 것이다.메시지를 보낼 때 막히지 않습니다.actor는 우편함에서 메시지를 받는 순서에 따라 메시지를 처리하고 현재 메시지 처리가 끝난 후에만 다음 메시지를 처리하기 때문에 메시지를 보낼 때의 병발 문제에 관심을 가지면 됩니다.
메시지 수신
보통actor는 무한 순환을 합니다.recevice를 통해 수신된 메시지를 기다리고 있습니다. 위의 코드에서 이 함수는 컴포지팅 호출을 통해 무한 순환을 합니다. 그러면 창고가 넘치지 않습니까?많은 함수식 언어와 마찬가지로 Elixir는 꼬리 호출을 제거했다.호출 제거란 함수가 마지막에 자신을 호출하면, 귀속 호출은 간단한 다이얼로 바뀐다는 것을 말한다.
하나의 actor를 철저히 닫기 위해서는 두 가지 조건을 충족시켜야 한다.하나는actor가 메시지 처리를 마친 후에 닫는 것을 알려야 한다.두 번째는 actor가 닫기에 적합한지 알아야 합니다.def module Talker do
def loop do
recevie do
[:shutdown] -> exit(:normal)
end
loop
end
end
send(pid, [:shutdown])
상태 있는 actor
양방향 통신
actor 모델은 메시지에 직접 답장하는 메커니즘을 제공하지 않지만, 우리는 스스로 해결할 수 있습니다. 보내는 프로세스의 식별자를 메시지에 포함합니다.이 메커니즘을 통해 소식의 수용자는 소식에 회답할 수 있다.
5.3 다음 날: 오류 처리 및 내결함성
병발의 중요한 특성 중 하나는 병발 코드가 용착성을 가지고 있다는 것이다.
대부분의 언어에서 유일한 처리 방법은 불법 파라미터가 잘못 검출되었을 때 검사 파라미터를 추가하는 것이다.Elixir는 오류 처리를 관리 프로세스로 분리하는 또 다른 방법을 제공했다. 이 방법은 간단해 보이지만, 코드를 더욱 간결하고, 더욱 유지보수적이며, 더욱 신뢰할 수 있도록 하는 아주 큰 개선이다.
오류 감지
붕괴되도록 내버려두다
방어식 프로그래밍은 주로 발생할 수 있는 결함을 예언함으로써 오류를 실현한다.actor 모형을 사용하는 프로그램은 방어식 프로그래밍을 하지 않습니다.무너지도록 내버려 두는 철학을 따랐다.
제6장 통신 순서 프로세스
6.1 만물이 모두 통신한다
통신 순서 프로세스(Communication Sequential Process, CSP) 모델은 actor 유형과 독립적이고 동시에 실행되는 실체로 구성되며 실체 간에도 메시지를 보내서 통신한다.그러나 두 모델의 가장 중요한 차이점은 CSP모델은 메시지를 보내는 실체에 주목하지 않고 메시지를 보낼 때 사용하는 채널에 주목한다는 것이다.
데이터 병렬
7.1 노트북에 숨겨진 슈퍼컴퓨터
도형 처리 단위 GPU는 강력한 데이터 병렬 처리기로서 수학 계산에 사용할 때 성능이 CPU를 초과하는데 이런 방법은 도형 처리기 기반의 유니버설 계산(GPGPU 프로그래밍)이 되었다.
7.2 첫날: GPGPU 프로그래밍
도형 처리와 데이터가 병행하는 3D 게임의 한 장면은 무수한 작은 삼각형으로 구성되어 있는데 각 삼각형은 시점과 관련된 투시 관계에 따라 화면에 있는 위치를 계산하고 재단, 조명 처리, 무늬 수정 등을 해야 한다. 이런 조작은 초당 25회 이상이 필요하다.
처리해야 할 데이터의 양은 매우 크지만 데이터에 가해진 조작은 상대적으로 간단한 벡터 조작이나 행렬 조작이다.따라서 이런 장면은 데이터 병행에 매우 적합하다.
데이터 병행은 여러 가지 방법으로 실현할 수 있는데 우리는 그 중의 두 가지, 즉 유수선과 대ALU를 배워야 한다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSON
JSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다.
그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다.
저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.
def module Talker do
def loop do
recevie do
[:greet, name] -> IO.puts("Hello ${name}")
[:praise, name]->IO.puts("#{name}, you're amazing")
[:celebrate, name, age]->IO.puts("Here's to another #{age} years, #{name}")
end
loop
end
end
pid = spawn(8Talker.loop/0)
send(pid, [:greet, "World"])
send(pid, ["praise", "Dewey"])
send(pid, [:celebrate, "Louie", 16])
sleep(1000)
def module Talker do
def loop do
recevie do
[:shutdown] -> exit(:normal)
end
loop
end
end
send(pid, [:shutdown])
6.1 만물이 모두 통신한다
통신 순서 프로세스(Communication Sequential Process, CSP) 모델은 actor 유형과 독립적이고 동시에 실행되는 실체로 구성되며 실체 간에도 메시지를 보내서 통신한다.그러나 두 모델의 가장 중요한 차이점은 CSP모델은 메시지를 보내는 실체에 주목하지 않고 메시지를 보낼 때 사용하는 채널에 주목한다는 것이다.
데이터 병렬
7.1 노트북에 숨겨진 슈퍼컴퓨터
도형 처리 단위 GPU는 강력한 데이터 병렬 처리기로서 수학 계산에 사용할 때 성능이 CPU를 초과하는데 이런 방법은 도형 처리기 기반의 유니버설 계산(GPGPU 프로그래밍)이 되었다.
7.2 첫날: GPGPU 프로그래밍
도형 처리와 데이터가 병행하는 3D 게임의 한 장면은 무수한 작은 삼각형으로 구성되어 있는데 각 삼각형은 시점과 관련된 투시 관계에 따라 화면에 있는 위치를 계산하고 재단, 조명 처리, 무늬 수정 등을 해야 한다. 이런 조작은 초당 25회 이상이 필요하다.
처리해야 할 데이터의 양은 매우 크지만 데이터에 가해진 조작은 상대적으로 간단한 벡터 조작이나 행렬 조작이다.따라서 이런 장면은 데이터 병행에 매우 적합하다.
데이터 병행은 여러 가지 방법으로 실현할 수 있는데 우리는 그 중의 두 가지, 즉 유수선과 대ALU를 배워야 한다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSON
JSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다.
그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다.
저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.