동시성과 병렬성

김수호·2024년 11월 8일

처음 봤을 때 동시성과 병렬성을 생각했을때
가장 먼저 떠오른건 쓰레딩, 스케쥴링, 멀티코어 등의 단어였다.

동시성병렬성
동시에 실행되는 것 같이 보이는 것실제로 동시에 여러 작업이 처리되는 것
싱글 코어에서 멀티 쓰레드(Multi thread)를 동작 시키는 방식멀티 코어에서 멀티 쓰레드(Multi thread)를 동작시키는 방식
논리적인 개념물리적인 개념

동시성은 어디에 사용될까?

쓰레딩은 보통 주기적인 처리하는데 사용되는것으로 알고 있다.
실제로 비트코인 자동 트레이딩 머신에서도 이를 활용하여 처리하도록 했다.
db에 특정 데이터를 주기적으로 처리해야하는 경우 등에서 사용한다고 보면 된다.

병렬성은 어디에 사용될까?

솔직히 병렬성은 사용하기가 되게 까다롭다.

이유는?

웹소켓으로 멀티코어 방식을 채택해서 온라인 mmo rpg를 서버 구성한다고 들었다.
이유는 싱글코어로는 200명 이상 넘는 유저를 실시간으로 처리할 수 없기 때문이다.
자바에서도 빠른 속도를 원한다면 병렬처리는 결국 필요할것인데.
이를 처리하기 위해서는 결국 병렬처리를 해야할 것이다.

해결방법은?
결국 데이터 일관성 문제로 동기화 문제가 발생한다.
이 동기화 문제를 해결하기 위해서는 락, 카프카 등을 통한 데이터 일관성을 보장해주면 된다.

락은 뭐고? 카프카는 뭐야?

  1. 락(lock)은 잠금개념이다.
    1개의 스레드가 이미 접근해서 처리하고 있다면 그 처리가 끝날 때까지 그 자원에 대해서 잠금을 건다.
    위 개념을 토대로
    읽기는 여러쓰레드가 접근이 가능하지만 쓰기에는 1개의 쓰레드만 접근할 수 있게 하는 방식
    1개의 스레드만 접근하게 하는 방식 등이 있다.
  2. 카프카는 분산 메시징 시스템이다.
    메세지 순서 보장,트랜잭션, 복제 기능, 최종 일관성 등의 기능이 있어 데이터 일관성을 보장할 수 있다.
profile
정답을 모르지만 답을 찾는 법을 알고, 그 답을 찾아낼 것이다. 그럼 괜찮지 않은가? -크리스 가드너-

0개의 댓글