'한 쓰레드가 진행중인 작업을 다른 쓰레드가 간섭하지 못하게 막는 것'
앞의 포스팅에서 멀티쓰레드 프로세스의 경우에, 여러 쓰레드가 같은 프로세스 내의 자원을 공유해 작업을 한다는 것을 배웠다. 그러면서 서로의 작업에 영향을 주게 될 때, 잠금(lock)을 걸어야 한다고 언급했었다.
이러한 일을 발생하는 것을 방지하기 위해 한 쓰레드가 특정 작업을 끝마치기 전까지 다른 쓰레드에 의해 방해받지 않도록 하는 것이 필요한데, 여기서 임계영역(critical section)과 잠금(lock)이 필요한 것이다.
이렇게 공유 데이터를 사용하는 코드 영역을 임계 영역으로 지정해두고, 공유 데이터(객체)가 갖고 있는 lock을 획득한 단 하나의 쓰레드만 이 영역 내의 코드를 수행할 수 있게 하는 것이다!
이 후 해당 쓰레드가 임계 영역 내의 모든 코드를 수행하고 벗어나서 lock을 반납해야만 다른 쓰레드가 반납된 lock을 획득하여 임계 영역의 코드를 수행할 수 있게 된다.
아이디 중복체그, 포탈 검색어 입력시 관련 검색어, 실시간 검색어, 날씨, 뉴스, 주식, 스크롤 페이징, 각종 API 👀
위에 나열해둔 것 외에도 여러가지 비동기 프로그래밍이 있다. 동기화를 간단히 알아보았는데 비동기 프로그래밍은 뭘까?
데이터를 처리하는 동안 다른 작업을 할 수 있기 때문에 자원을 효율적으로 사용하며 불필요한 로딩을 줄일 수 있다. 비동기 프로그래밍 처리 후에 콜백 함수를 통해 알려준다.