병행
병행 (並行, Concurrency)은 둘 이상의 작업이 동시에 진행되는 것처럼 보이는 상태를 의미한다. 이는 실제 물리적으로 동시에 실행되는 경우(병렬 처리)와, 짧은 시간 간격으로 번갈아 가며 실행되어 마치 동시에 실행되는 것처럼 보이는 경우(시분할)를 모두 포함한다.
병행성은 주로 컴퓨터 과학 분야에서 많이 사용되는 개념이지만, 일상생활에서도 여러 활동을 동시에 처리하는 상황을 설명할 때 사용될 수 있다. 예를 들어, "운전하면서 라디오를 듣는 것은 병행 작업이다"와 같이 표현할 수 있다.
컴퓨터 과학에서의 병행성
컴퓨터 과학에서 병행성은 운영체제, 프로그래밍 언어, 데이터베이스 등 다양한 분야에서 중요한 역할을 한다. 병행성을 활용하면 시스템의 처리량(throughput)을 향상시키고, 응답 속도를 개선하며, 자원 활용률을 높일 수 있다.
- 병행 프로그래밍: 여러 개의 스레드나 프로세스를 사용하여 프로그램을 작성하는 기법이다. 병행 프로그래밍을 통해 여러 작업을 동시에 처리하여 프로그램의 성능을 향상시킬 수 있다. 대표적인 예시로 멀티 스레드 프로그래밍, 멀티 프로세스 프로그래밍 등이 있다.
- 병행 처리: 여러 개의 CPU 또는 코어를 사용하여 작업을 동시에 처리하는 것을 의미한다. 병렬 처리는 병행성의 한 형태로, 실제 물리적으로 동시에 작업을 실행하여 성능 향상을 극대화한다.
- 동시성 제어: 여러 작업이 공유 자원에 동시에 접근하는 경우, 데이터의 무결성을 보장하기 위해 필요한 기술이다. 대표적인 예시로 뮤텍스(Mutex), 세마포어(Semaphore), 잠금(Lock) 등이 있다.
병행성의 장단점
장점:
- 성능 향상: 여러 작업을 동시에 처리하여 시스템의 처리량을 향상시키고 응답 속도를 개선할 수 있다.
- 자원 활용률 증가: 시스템의 자원을 효율적으로 활용하여 전체적인 시스템 효율을 높일 수 있다.
- 응답성 향상: 사용자 인터페이스의 응답성을 유지하면서 백그라운드 작업을 처리할 수 있다.
단점:
- 복잡성 증가: 병행 프로그래밍은 여러 스레드 또는 프로세스 간의 동기화 문제를 고려해야 하므로, 프로그램의 복잡도가 증가할 수 있다.
- 디버깅 어려움: 병행 프로그램은 예상치 못한 타이밍 문제로 인해 오류가 발생하기 쉽고, 디버깅이 어려울 수 있다.
- 자원 경쟁: 여러 작업이 공유 자원에 동시에 접근하는 경우, 자원 경쟁으로 인해 성능 저하가 발생할 수 있다.
관련 용어
- 병렬성 (Parallelism): 실제로 여러 작업을 동시에 실행하는 것을 의미하며, 병행성의 한 형태이다.
- 스레드 (Thread): 프로세스 내에서 실행되는 실행 흐름의 단위이다.
- 프로세스 (Process): 실행 중인 프로그램의 인스턴스이다.
- 동기화 (Synchronization): 여러 스레드 또는 프로세스 간의 실행 순서를 맞추거나, 공유 자원에 대한 접근을 제어하는 것을 의미한다.