Post

(TIL) 2024-12-05

과제 기능 중에 점수 매칭 기능을 구현하고 나서 별도로 실시간 매칭도 가능할 것 같다는 생각이 들어 시도를 해보았다. 실시간 매칭 API를 통해서 서버에 요청을 보낸 후 다른 유저가 매칭 요청을 하게되면 비슷한 점수대의 사람을 뽑아서 경기 진행 후 결과를 return 하는 방식으로 구상을 하고 대충 코드를 짠 후에 insomnia를 통해서 테스트를 해보았다. 1번 사용자가 실시간 매칭 API를 통해서 서버에 요청하고, 서버는 해당 요청에 의해서 대상을 계속 찾는 상태에서 2번 사용자로 요청을 보내면 서버에서 반응이 없다. 이유가 뭘까 라는 생각에 정보를 찾아보고 내린 결론은 node는 싱글 스레드 기반이고 이미 1번 사용자가 서버에 요청을 보내어 서버는 현재 대상을 찾고 있는 중이라서 아직까지 스레드가 동작중이고 2번 사용자가 요청을 보내도 서버는 이에 응답할 수가 없다는 것이다. 그럼 결국 해결 방법은 이걸 멀티 쓰레드로 변경하게 되면 가능할지는 나중에 시간날 때 별도로 테스트를 해봐야겠다.

아래는 원인을 찾아보면서 스레드 관련해서 간단하게 정리해보았다.

싱글 스레드(Single-Thread)


프로세스가 단일 스레드로 동작하는 방식을 말하며 처리를 단일 스레드만으로 직렬 처리하는 프로그래밍 방법이 싱글 스레드다.

  1. 장점
    자원 접근에 대한 동기화를 신경쓰지 않아도 된다. 여러 개의 스레드가 프로세스의 자원을 공유할 경우, 각 스레드가 원하는 결과를 얻게 하려면 공용 자원에 대한 접근을 제어해야 한다. 모든 스레드가 일정 자원에 동시에 접근하거나, 똑같은 작업을 실행하려는 경우, 에러가 발생하거나 원하는 값이 나오지 않는다. 그래서, 스레드들이 동시에 같은 자원에 접근하지 못하도록 제어해줘야만 한다.

  2. 단점
    여러 개의 CPU를 활용하지 못한다. 싱글 스레드는 하나의 물리적 코어밖에 사용하지 못해 멀티 코어 머신에서 CPU 사용을 최적화할 수 없다.

멀티 스레드 (Multi-Thread)


하나의 프로세스 내에서 둘 이상의 스레드가 동시에 작업을 수행을 말한다. 멀티 프로세스(multi process)는 여러 개의 CPU를 사용하여 여러 프로세스를 동시에 수행 시스템 자원의 활용 극대화 및 처리량 증대할 수 있어 단일 프로세스 시스템의 효율성을 높일 수 있다.

  1. 장점
    멀티스레드인 경우 작업을 분리해서 수행하므로 실시간으로 사용자에게 응답할 수 있다.

  2. 단점
    다른 프로세스에서 스레드를 제어할 수 없으며 자원 공유의 문제가 발생할 수 있다. 하나의 스레드에 문제가 발생하면 전체 프로세스가 영향을 받게 된다. 디테일한 설계가 필요하다.

동시성과 병렬성


운영체제(또는 가상 머신)는 각 스레드를 시간에 따라 분할하여, 여러 스레드가 일정 시간마다 돌아가면서 실행된다. 동시에 돌릴 수 있는 스레드 수는 컴퓨터에 있는 코어 개수로 제한된다.

  • 동시성 : 여러 개의 스레드가 시분할 방식. (하나의 코어 안에서 스레드가 나눠지는 경우)
  • 병렬성 : 멀티 코어 환경에서 여러 개의 스레드가 실제로 동시에 수행
This post is licensed under CC BY 4.0 by the author.