동시성은 동시에 실행되지 않더라도 같은 시간에 진행되고 있음을 말합니다.병렬 처리는 실행 시작이 정말로 동시적일 수 있 때 발생합니다.교착 상태란 공유 자원에 대한 요구가 엉켜서 자원 관리를 잘못하여 프로세스나 스레드가 자원의 락을 획득하기 위해 무한 대기 하는 것을
클래스 정의 receive 메서드를 통해 구현 receive 메서드는 메시지 처리 방법 구현과 함께 표준 Scala 패턴 일치를 사용하여 Actor가 처리할 수 있는 메시지를 정의하는 일련의 case 문(PartialFunction[Any, Unit] 타입을 가지고
Actor trait 는 receive만을 정의하며, 이는 액터의 동작을 구현합니다.현재 액터 동작이 수신된 메시지와 일치하지 않는 경우에는 처리되지 않은 메시지 처리 함수인 unhandled가 호출됩니다. unhandled는 akka.actor.UnhandledMe
이 글은 인텔리제이 내에 scala 가 설치된 상황 이후의 글입니다.기본적인 Java - Maven 프로젝트를 하나 생성한다.생성된 pom.xml 에 다음과 같이 코드를 추가한다.처음에 디펜던시만 추가 했더니 오류가 나서, maven repository 를 추가했더니
여러 개의 스레드가 동시에 작업을 수행하더라도, Thread 나 Task 가 포함하지 않는 코드가 존재하기 때문에 순차적 작업이 존재하게 된다.아카는 이러한 순차적 작업을 줄여준다.아카 세계의 컴포넌트는 액터 이다. 하나의 액터만 집어내어 기존의 JVM 에서 독자적인
아카 계층구조
자바나 C이 코드는 보통 예외가 발생한 소스로부터 멀리 떨어져있기 때문에 예외가 발생한 이유를 알기 어렵고, 그것을 어떻게 '처리'해야 하는지는 더욱 알기 어렵다.그렇게 때문에 할 수 있는 일이 예외가 발생했다는 사실을 로그 파일에 기록하는 것으로 국한된다.액터 모델에
상태기계 : 한 번에 한 개의 상태를 반영하는 기계 ex) 커피 자동 판매기커피 한 잔이 1,000 원 이라고 할 때 동전을 집어넣지 않은 자판기는 초기상태를 반영하고 있다.(initial)500원짜리 동전을 하나 집어넣으면 자판기는 500원이 입력된 상태를 반영한다.
라우터 아카 라이브러리에서 병렬 처리를 해야할 때 사용하는 메커니즘은 라우터이다. PingActor가 자식 액터를 만들 때 보통과 다르게 아카의 라우터를 만들고 있다. ` 보통의 경우라면 context.actorOf(Props.create(classOf[Pin
Future는 아직 계산되지 않은 값을 나타내며, 이 값은 언젠가 나중에 계산될 수 있다. 스칼라에서는 scala.concurrent.Future 패키지에 Future가 정의되어 있으며, 아카에서도 이를 사용한다.퓨처는 다음과 같은 상황에서 유용하다.긴 실행 시간이 소
아카에서 상태를 안전하게 공유할 때 쓰는 도구. 내부적으로는 액터를 사용하는데, 상태를 바꿀 때 좀 더 편하게 만들어 준다.에이전트를 만들 때는 초기 값을 줘야 한다. 정수를 다루는 에이전트를 만드는 예시이다.상태를 바꿀 때는 send 또는 alrter메서드를 사용한
프로그래밍에서 값을 감싼(wrap) 상자 같은 것.퓨처와 에이전트 또한 모나드이다.몇 가지 특별한 규칙과 연산을 따름.unit 또는 pure : 일반 값을 모나드로 감싸는 연산map : 모나드가 감싼 값을 변환flatMap 또는 bind : 모나드가 감싼 값을 또 다른
두 개 이상의 작업이 동시에 진행되고 있지만 꼭 동시에 실행될 필요는 없다. 즉, 작업들이 번갈아 가면서 일부분씩 실행될 수 있다.작업이 정말로 동시에 실행되는 경우를 말한다.메서드 호출이 끝날 때까지 호출한 쪽이 기다려야 함.메서드를 호출하고 나서 바로 다른 일을 할
액터 : 상태와 행동을 캡슐화하는 객체. 메시지를 주고받아 통신. 액터를 사람처럼 생각하면 이해하기 쉬움.부분 작업을 나누고 문제 상황을 어떻게 처리할지 고민하면 됨. 주의사항ActorSystem은 무거운 구조임. 스레드도 할당하게 되므로, 논리적인 애플리케이션당 하나
액터란 무엇인가? 액터는 상태, 행동, 메일박스, 자식 액터, 그리고 감독 전략을 담는 컨테이너이다. 이 모든 것은 액터 레퍼런스 뒤에 캡슐화되어 있다. 액터에는 명시적인 생명주기가 있으며, 더 이상 참조되지 않아도 자동으로 파괴되지 않는다. 액터 레퍼런스 액
감독이란 무엇인가 액터에서 발생할 수 있는 예외는 두 가지 유형이 있다: 입력 유효성 검사 오류 일반적인 try-catch나 다른 언어와 표준 라이브러리 도구로 처리할 수 있는 예상되는 예외 예상치 못한 실패 예를 들어 네트워크 리소스를 사용할 수 없거나, 디스
액터 참조는 ActorRef의 하위 유형으로, 주로 대표하는 액터에게 메시지를 보내는 것을 지원한다. 각 액터는 ActorContext.self 필드를 통해 자기 자신의 로컬 참조에 접근할 수 있으며, 이 참조는 다른 액터에게 답장을 받기 위해 메시지에 포함될 수 있다
Akka는 단일 기계 내의 여러 프로세서 코어를 사용하거나 ("스케일링 업") 컴퓨터 네트워크 전반에 걸쳐 분산 (스케일링 아웃) 하여 신뢰할 수 있는 애플리케이션을 구축하는 데 도움을 준다. 이를 가능하게 하는 핵심 추상화는 코드 유닛(액터) 간의 모든 상호 작용이
Akka 테스트 스위트는 로컬 컨텍스트 상에서 메시지의 유실이 발생하지 않을 것이라 가정하고 있다. 그러나 JVM에서 일반적인 메소드 호출이 실패할 수 있는 이유로, 로컬 'tell' 연산 또한 실패할 가능성이 있다. 예컨대, StackOverflowError와 Out
Akka의 핵심 도구 세트를 기반으로, 더욱 강력한 고급 추상화를 제공한다.앞서 언급했듯이, 신뢰성 있는 전달을 위한 명확한 대안은 명시적인 ACK-RETRY 프로토콜이다. 가장 간단한 형태로는 다음이 필요하다.개별 메시지를 식별할 방법시간 내에 확인되지 않으면 메시지
유데미에 아카 관련 기초 강의가 있어서 수강하고있다. 그 강의로 공부한 내용을 정리하고자 한다. 초기 설정 먼저 프로젝트 설정을 해준다. 난 강의의 설정값을 그대로 따라했다. ` 그 다음 아카시스템이 제대로 동작하는지 확인하기 위해 간단한 코드를 작성했다.
이번에는 좀 더 심화 내용을 복습한다.공부 한 내용은 코드 블럭 안에 주석으로 달았다.
이번 강의에서는 멀티스레드에 대한 복습을 진행하였다.멀티스레드는 멀티코어 프로세서 덕분에 유용하지만, 스레드의 동작을 예측하기 어렵다.스레드 관리에는 여러 메서드가 있지만, 'stop', 'suspend', 'resume' 와 같은 메서드는 위험하며 잘 사용하지 않는다
이 강의는 솔직히 완벽히 이해하지 못했다.그래도 강사님의 말을 정리해보자면 스레드 모델에서 경험할 수 있는 문제점들은 아래와 같다.객체 지향의 캡슐화 원칙이 멀티 스레딩 환경에서 깨진다.작업을 위임하는 것이 까다롭다.멀티 스레딩 또는 분산 환경에서 오류를 추적하고 처리
액터 시스템은 내부적으로 다수의 스레드를 제어하는 무거운 데이터 구조이다.애플리케이션 인스턴스당 하나의 액터 시스템을 갖는것이 좋다.액터 시스템의 이름에는 영어와 숫자만 포함되어야 한다.액터는 액터 시스템 내에서 고유하게 식별된다.메시지는 비동기적으로 전달되고 처리된다
이번 강의에서는 액터가 메시지를 주고 받는 기본적인 내용을 다루었다. 예시가 많았는데 아무래도 영문 구어체를 번역해서 보다보니 이해가 조금 안되는 부분도 있다.Akka는 Actor 모델 기반의 동시성 프레임워크이다. Actor는 시스템 내의 작은 연산 단위로서, 메시지
앞서 배운 내용에 대한 연습 문제를 만들었다.사실 내가 만든 건 아니고, 강사님이 만드신거지만 설명과 코드를 같이 보니 이해가 조금 되는 것 같다.첫 번째 연습 문제에서는 내부 변수를 가진 '카운터 액터'를 생성하여 증가, 감소, 출력의 기능을 하도록 만들었다.두 번째
이번 강의에서는 액터가 어떻게 동작하는지 그림 예시를 통해 배웠다. 유데미 캡쳐가 안되어서 그림을 첨부 못 하는 게 아쉽다. 질문 액터들이 완전히 블로킹되지 않는 방식으로 작동하는데, 이에 대해 메시지의 순서를 가정할 수 있는지, 그리고 동시에 여러 메시지를 액터에
액터의 행동을 시간에 따라 변경하려면 현재 상태를 추적하고 메시지 핸들러 내에서 해당 상테에 따라 다르게 메시지에 반응해야 한다. 강의에서는 어머니, 아이 두 개의 액터를 사용하였다. 어머니가 아이에게 음식을 주면 아이의 상태가 변한다. 채소를 받은 아이는 슬퍼지
이번 강의에서는 context.become을 활용한 Counter Actor 구현을 학습했다. 이 Actor는 자신의 상태를 변경하지 않으면서 카운터를 증가시키거나 감소시키는 기능을 제공한다.이를 위해 context.become 메서드를 사용해 현재 카운트 값을 변경하
액터가 자식 액터를 만드는 것에 대해 공부했다. // 구현 가능한 가장 간단한 액터 예시 import akka.actor.Actor object ChildActors extends App { object Parent { case class Create
Akka 액터 모델은 비동기적이며, waitFor() 메소드를 통해 비동기 동작을 동기화 할 수 있다.should 및 contain 메소드를 통해 예상되는 결과와 실제 결과를 비교하여 테스트가 예상대로 동작하는지 확인 가능하다.각 테스트가 끝난 후에는 disposeCa