Thread끼리는 메모리 공유가 되고 process끼리는 메모리 공유가 안된다
Multi Thread 환경에서 하나의 Queue를 여러 Thread가 공유하는 것은 위험하며, 이를 방지하는 제어를 베타제어라고 한다.
Thread가 같은 Queue를 동시에 수정하면 데이터가 꼬일 수 있음.Queue의 맨 앞 데이터를 가져가려고 하면 둘 다 같은 데이터를 가져가게 됨.Race condition이라고 한다.처음부터 수정이 불가능한 객체(Immutable Object) 를 만들어 동시성 문제를 방지.
동시에 실행되는 여러 개의 트랜잭션이 정상적으로 작동하도록 트랜잭션 실행 순서를 제어한다.

일반 클래스도 읽기(Read) 는
Thread-safe한 경우가 있음.
쓰기(Write) 는 한Thread에서만 하고, 읽기를 여러Thread가 수행하면 유용함.
Thread만 실행하도록 제한.Thread가 특정 코드를 실행하기 때문에, 코드의 실행 시간이 길어지면 성능 저하 발생.One Process, One Thread Architecture가 등장함.
One Process, One Thread Architecture
하나의 프로세스가 하나의 스레드만 실행하는 아키텍처이다.
동시성 제어가 필요 없고, 각 프로세스가 독립적이라는 장점이 있다.
하지만 프로세스가 증가하여 메모리 사용량이 증가하고 프로세스간 통신(IPC) 이 필요하다는 단점이 있다.
따라서MSA환경에서 사용하면 좋다.
Lock을 사용하지 않고도 베타제어를 수행하는 방식.프로세스는 메모리를 공유하지 않기 때문에 통신이 필요함.
서버 머신 한 대의 성능에는 한계가 있기 때문에 Scale-out(수평 확장) 이 필수적임.
하나의 Process를 여러 대의 서버에서 실행할 수 없기 때문에, 작은 기능 단위로 분리하는 것이 유리함.
따라서 One Process, One Thread Architecture가 설득력이 있음.
서로 다른 언어로 개발된 프로세스끼리 통신하기 위해 Google Protobuf나 Apache Avro 같은 기술이 등장.
*.idl 파일을 정의하면 다양한 언어에서 사용할 수 있도록 변환 가능.
