개발기록

내가 쓰는 기술블로그의 주제는 항상 내가 정확하게 답변하지 못한 것들을 항상 주제로 삼는다. 개발서적 및 개발 업무시에 주로 나오는 고려사항 중 동시성 처리, 병렬성 처리에 대해서 정리해보고자 한다! 동시성(Concurrency) 병렬성(Parallelism) 동시에 실행되는 것처럼 보이게 하는 것! 실제로 동시에 여러작업이 처리되는 것! 싱글코어에서 Multi thread를 동작 시키는 것 멀티코어에서 Multi thread를 동작시키는 것 한번에 많은 것을 처리 한번에 많은 일을 처리 논리적 물리적 # 동시성(Concurrency) 위의 그림은 싱글 코어내에서 멀티 스레드가 실행되는 동시성을 나타낸다. 동시성은 2개의 Thread가 진행중이어야하는 전제조건이 따른다 ! '동시'라는 것이 실제 동시에 ..

'동기' == '블로킹', '비동기' == '논블로킹' 맞나? 아닌가? 헷갈려서 포스팅의 주제로 삼았다! 동기(synchronous) / 비동기(Asynchronous) 는 작업을 수행하는 주체가 2개 이상이어야 한다. 이때의 작업의 시작과 종료를 맞물리게 놔두면 이를 동기! 서로의 작업의 시간이 관계가 없다면 이를 비동기라고 한다! 블로킹(Blocking) / 논블로킹(non-blocking)은 작업의 대상이 2개이상이어야 한다 # 동기(synchronous) / 비동기(Asynchronous) 동기 작업이란 작업을 수행하는 두 개 이상의 주체가 서로 동시에 수행하거나, 동시에 끝나거나, 끝나는 동시에 시작할 때를 의미합니다. 시작과 종료를 동시에 하거나, 하나의 작업이 끝나는 동시에 다른 주체가 작업..
보호되어 있는 글입니다.

스레드를 사용하게되면 필연적으로 만나게되는 문제가 바로 동기화(Synchronization)입니다. 아래는 여러개의 스레드가 실행되는 과정을 도식화한 그림입니다. 여러개의 스레드들이 있다면 이 스레드들은 서로 번갈아가면서 실행이 될 것입니다. CPU가 하나이기때문에 OS의 스케줄링 정책에 따라 쓰레드를 조금씩 실행시키는 방식이 됩니다. 어떤 스레드가 실행될지는 OS 스케줄러가 정하기 때문에 우리는 알수가 없습니다. 스레드는 별도로 실행되는 하나의 실행이므로 동시에 여러 스레드가 실행되면 스레드들이 공유하는 자원에 대해 동기화가 발생할 가능성이 매우 높다! 프로세스들 간에 대해서는 이미 OS가 별도의 프로그램으로 동작하도록 알아서 처리를 해주고 있습니다. 프로세스는 자기만에 address space 범위를..