동시성의 중요성

  • 동시 컴퓨팅은 한 번에 여러일 가능
  • 동시 시스템이란 여러 일을 동시에 처리하는 시스템
  • 현실 세계는 여러 일이 동시에 일어남. 이런 현실을 모델링하려면 동시성 프로그래밍이 필요
  • 동시성 이용시, 지연 시간을 가리고, 기존 처리 자원 활용도 높여 시스템 성능과 처리율 크게 개선 가능
  • 순차 프로그래밍의 반대 개념
    • 동시성은 임의 순서로 실행해도 같은 결과를 낳는 독립적인 연산이 있다는 것을 전제로 삼는 개념

동시성의 중요성

  • 고성능 애플리케이션
  • 동시성 갖춘 시스템 만들기
  • 현대 컴퓨터 시스템이 갖춘 코어와 프로세서 수가 점점 늘어나면서 동시성 프로그래밍이 소프트웨어 개발하기위한 꼭 필요한 지식이 됨
    • 한정된 자원으로 빠른 성능 얻기 위해 필요한 동시성

동시성 도입 시 왜 시스템 성능이 좋아지는가

동시성 이용시 다음 3가지 방법으로 시스템 성능 개선 가능

  • 지연 시간 줄이기(한 가지 작업 더 빨리 처리)
  • 지연 시간 숨기기(지연 시간 긴 작업중에 다른 일 함께 처리)
  • 처리율 개선(같은 시간 동안 시스템이 더 많은 작업 처리)

크고 복잡한 문제 풀기

  • 현실 세계 관리하는 시스템 개발시 엔지니어가 마주치는 문제 중 대부분은 매우 복잡해서 순차적으로 처리 못할 정도임.
  • 이런 문제의 복잡성은 문제 자체의 크기 또는 우리가 만들려는 시스템을 잘 이해하지 못해서 이기도함.

확장성(scalability)

  • 확장성이란
    • 시스템에 자원을 추가하는 방법으로 시스템의 성능 늘릴수 있는 시스템의 성질
    • 확장성은 수직(vertical), 수평(horizontal) 로 나뉨
  • 수직 확장성(scale up)
    • 프로세서를 더 쎈걸로 교체
    • 메모리 증설
    • 제한없이 좋은걸로 할 수 없기에 성능 한계 도달이 쉽기에 확장성 제한됨
  • 수평 확장성(scaling out)
    • 기존 처리 자원과 새로 추가된 처리 자원에 부하를 분산
    • 처리 자원 수 늘릴수 있는 한 시스템 성능도 높일 수 있음
    • 이건 수직 확장성에 비해 확장성 제한 문제 일어날 여지 적기에 업계는 이거 채택
  • 수평 확장을 구현하려면 시스템에 동시성이 도입되야한다.
  • 그것도 컴 여러 대에 걸친 동시성이 적용된 컴퓨팅 클러스터(데이터 처리 목적으로 만들어진 서로 연결된 여러대 컴퓨터)가 필요

느슨한 결합

  • 복잡성 관리를 위해 개발자는 이에 대응해 시스템을 좀 더 단순한 구성 요소로 분할하고, 이들이 서로 통신하게끔 설계를 바꿔야함
  • 책임의 분할
  • 할 일과 수행 시점을 분리하는 방법도 성능, 확장성, 신뢰성과함께 앱의 내부 구조를 극적으로 개선해줌