TIL 06 - 동시성과 병렬성(Golang)

프동프동·2023년 2월 10일
0

TIL

목록 보기
6/46
post-thumbnail

동시성(Concurrency)

메인 스레드에서 분산처리 시킨 작업을 다른 여러개의 스레드에서 분산하여 동시에 처리한다.

작업의 순서와 상관 없이 독립적이지만 유사한 여러개의 작업을 처리할 때 사용한다.

필요한 이유: 여러개의 작업을 처리할 때 성능과 반응성을 좋게 하기위함 이는 곧 최적화와 관련이있다.

  • 논리적인 개념
    • 동시에 실행되는 것 같이 보이는 것을 의미
  • 싱글 코어에서 멀티 쓰레드를 동작 시키는 방식
    • 내부적으로 쓰레드간에 Context Switch가 일어난다.

동기(Synchronous)

다른 스레드에게 일을 시작시키고 작업이 끝날때까지 기다린다.

비동기(Asynchronous)

다른 스레드에게 일을 시작시키고 작업이 끝날때까지 기다리지 않는다.

작업을 보내는 스레드에 관련된 개념

직렬성(Serialization)

메인 스레드에서 분산처리 시킨 작업을 다른 한개의 스레드에서 처리한다.

작업의 순서가 필요한 경우 사용한다.

병렬성(Parallelism)

특정 순간에 여러 작업(Task)이 동시에 병렬로 실행되는 것을 의미, 여러 코어에서 작업이 진행되기에 진정한 의미의 동시 실행이라고 할 수 있다.

  • 물리적인 개념
    • 실제로 동시에 여러 작업이 처리되는 것
  • 멀티 코어에서 멀티 쓰레드를 동작시키는 방식
  • 사용 방법
    • GOMAXPROCS를 이용하여 프로그름애세 사용할 CPU 코어 개수를 설정해 최적의 Task 수를 선정 및 병렬성을 구현할 수 있다.
    • 계산을 독립적으로 실행할 수 있는 별도의 조각으로 나눌 수 있는 경우 채널을 사용하여 병렬화 가능
profile
좋은 개발자가 되고싶은

0개의 댓글