동시성과 병렬성.
동시성과 병렬성은 다른 개념이다.
동시성의 경우 실제로 동시성을 의미하는것이 아니라. 사용자가 느끼기에 동시에 이루워 지는 작업을 뜻하고
병렬성이란 실제로 같은 시간에 동작이 병렬적으로 이루워 지는것을 의미한다 cpu의 코어 개수마다 작업을 병렬적으로 한다 라는것은
각각의 코어가 하나씩 동작을잡고 있음으로 볼 수 있으며 동시성의 경우 이 작업중 실시간으로 동작이 변하면서 이루워 지는 작업과
같은것으로 확인 할 수 있을듯 하다. 실제로 동시성의 경우 지속적으로 컨텍스트 스위칭을 하게 되고 이때
공유 자원이라는 것을 사용해서 처리 할 수 있도록 한다. 이때 공유 자원을 읽는 중에 스위칭이 되어 접근되어 있을때 다시 접근 하거나
하는 경우가 발생할 수 있다 .이 때 동시성의 문제가 발생하고 이와 같은 로직에 대해서 설명하는 내용이라고 볼 수 있다.
일반적으로는 그래서 pthread_mutex_lock과 같은 로직을 이용하여서 데이터의 무결성을 보장 하려고 한다.
하지만 위와 같은 로직을 빈번하게 사용함으로서 매번 공유자원을 체크하는 로직이 들어가는것도 처리해야할 부분이다.
위와 같은 동시성에 관련된 이야기로 유명한 내용인 철학자의 식사 라는 문제가 있고 위와 같은 문제에서 어떻게 해결할지에 대해서
설명해 놓은 부분 이라고 할 수 있다 .
책에서는 동시성을 이용해야 하는 작업을 종료시각을 알 수 없거나 완료할때까지 시간이 오래 걸리는 블로킹 작업이 있을때마다
작업을 두개의 동시작업으로 나눠야 한다고 한다. 이렇게 처리 함으로서 다른 스레드가 스위칭 하면서 처리 할 수 있도록 하는 내용인듯 하다.
원자적인 작업에 대해서는 완료를 보장받지만 그외로 원자성이 없는 작업이 경우 동시성을 침범 할 수 있다. 따라서
위와 같은 처리 에서는 필요에 맞게 무결성을 보장하는것이 필요하다.