CSAPP 독서 내용 정리 12-1 ~12-3

이형준·2023년 5월 22일
0

CSAPP

목록 보기
10/10

프로세스를 사용한 동시성 프로그래밍 (멀티프로세싱)⛱️

  • 동시성 프로그램을 만드는 가장 간단한 방법으로, fork, exec, waitpid와 같은 함수를 사용한다.

  • 여러 개의 별도 프로세스를 두어 개별로 동작시키며 동시성을 구현한다.

  • 각각의 프로세스가 독립적으로 실행되므로, 한 프로세스의 오류나 충돌이 다른 프로세스에 영향을 미치지 않는다 ! 따라서 안정성과 신뢰성이 뛰어나다.

  • 여러 작업을 각각의 프로세스에서 제약 없이 병렬 처리가 가능하다.

  • 하지만 각 프로세스들이 자체적인 메모리 공간과 리소스를 사용하기에, 메모리 측면에서 좋지 않다.

  • 또한, 각 프로세스간의 통신과 데이터 공유가 복잡하기에 확장성이 제한된다.

  • 운영체제의 관리와 스케줄링에 많은 리소스를 요구한다.

요약하면 병렬 처리, 격리와 안정성에서 강점을 보이지만, 전체적인 성능적인 면에서 부족한 면을 보인다!

I/O 다중화를 이용한 동시성 프로그래밍 ⌨️

  • 일반적인 동시성 프로그램과 달리 입출력 작업이 필요한 경우에만 작업을 처리하고, 그 외에는 다른 작업을 처리할 수 있도록 한다. select, poll, epoll과 같은 시스템 함수를 이용하는 방식이 대표적

  • 단일 프로세스의 컨텍스트에서 돌아가므로, 멀티프로세싱과 멀티스레딩에 비해 단순하고 직관적이고, 데이터 공유가 쉽다.

  • 컨텍스트 스위칭이 필요없기 때문에 성능적으로 매우 효율적이다.

  • 단점으로는 코딩이 복잡하고 디버깅이 어려울 수 있다는 정도?

  • 압도적인 성능 덕에 현대의 고성능 서버들은 대부분 이 방식을 이용한 이벤트 기반 서버이다.

요약하면 설계의 어려움을 감수한다면 팔방미인과도 같은 방법!

쓰레드를 이용한 동시성 프로그래밍 🪆

  • 멀티프로세스와 유사하지만, 프로세스 내에서 더 잘게 쪼갠 스레드라는 단위로 흐름을 나누어 동작한다. 하나의 프로세스 내에서 공유하는 메모리 공간을 가지기에 리소스 공유가 멀티프로세싱에 비해 간단하다. 하지만 lock과 같은 별도의 동기화 메커니즘이 필요하다!

  • 프로세스의 생성과 삭제에 비해 스레드의 생성과 삭제는 비용이 비교적 적게 든다.

요약하면 간단한 구현과 작은 규모의 동시성 처리에 특화된 방식!

profile
저의 미약한 재능이 세상을 바꿀 수 있을 거라 믿습니다.

0개의 댓글

관련 채용 정보