처음 봤을 때 동시성과 병렬성을 생각했을때
가장 먼저 떠오른건 쓰레딩, 스케쥴링, 멀티코어 등의 단어였다.
| 동시성 | 병렬성 |
|---|---|
| 동시에 실행되는 것 같이 보이는 것 | 실제로 동시에 여러 작업이 처리되는 것 |
| 싱글 코어에서 멀티 쓰레드(Multi thread)를 동작 시키는 방식 | 멀티 코어에서 멀티 쓰레드(Multi thread)를 동작시키는 방식 |
| 논리적인 개념 | 물리적인 개념 |


동시성은 어디에 사용될까?
쓰레딩은 보통 주기적인 처리하는데 사용되는것으로 알고 있다.
실제로 비트코인 자동 트레이딩 머신에서도 이를 활용하여 처리하도록 했다.
db에 특정 데이터를 주기적으로 처리해야하는 경우 등에서 사용한다고 보면 된다.
병렬성은 어디에 사용될까?
솔직히 병렬성은 사용하기가 되게 까다롭다.
이유는?
웹소켓으로 멀티코어 방식을 채택해서 온라인 mmo rpg를 서버 구성한다고 들었다.
이유는 싱글코어로는 200명 이상 넘는 유저를 실시간으로 처리할 수 없기 때문이다.
자바에서도 빠른 속도를 원한다면 병렬처리는 결국 필요할것인데.
이를 처리하기 위해서는 결국 병렬처리를 해야할 것이다.
해결방법은?
결국 데이터 일관성 문제로 동기화 문제가 발생한다.
이 동기화 문제를 해결하기 위해서는 락, 카프카 등을 통한 데이터 일관성을 보장해주면 된다.
락은 뭐고? 카프카는 뭐야?