질문을 삭제하지 말아주세요.!
 
1
0
-1

라라벨 이벤트를 공부하다가 큐를 알게되었는데요


제가 이해한 내용이 맞나 확인좀 부탁드리겠습니다


로직들이 실행되면서 이벤트가 발생하면 리스너에 정리된대로 처리되는데


중요한 작업이나 시간이 많이 걸리는 작업은 큐로 우선순위를 정해서 다른 작업을 하는중에도 


우선순위가 높은 작업이 들어오면 그것부터 처리하고 다음작업을 실행한다고 이해했습니다 


제가 이렇게 큐에대해서 이해했지만 이해가 안되는게 그럼 유저1이 우선순위가 낮은 작업을 요청했는데, 잠시후에 유저2가 우선순위가 높은


작업을 요청하면 유저1은 우선순위 높은 작업을 처리할떄까지 하얀화면 보면서 기다려야되나요 ... ?? 


또 처리되는데 30초정도걸리는 같은 이벤트를 동시에 각자 다른사람들이 100개 요청된다고하면 php는 순차적으로 로직을 처리하니까, 100번째 이벤트를 요청한 유저는 또 하얀되면 보면서 기다리게되나요 ??


아니면 비동기식처럼 다른 작업도 할수있을까요 ?? 


제가 원하는건 멀티스레드로 동시에 처리되는것을 원하는데 php는 그렇지 못하다고 알고있습니다 


서버 코어가 4코어면 동시에 4작업씩 할수있는 방법은 없나요 ??




    CommentAdd your comment...

    2 answers

    1.  
      1
      0
      -1

      1. 이벤트와 큐는 별도의 개념입니다. 이벤트(어떤 사건)를 핸들링할 때, 작업 큐를 사용할 수도 있습니다. 물론 같은 프로세스에서 핸들링할 수도 있죠.

      2. PHP는 설정에 따라 멀티 프로세스로 작동합니다. 은행에 손님이 들어오면 여러 명의 창구 직원이 응대하듯이 말이죠.
      2.1. 링크는 아파치를 사용하는 경우인데요, 엔진엑스도 프로세스 매니저를 붙이면 똑같습니다. https://gist.github.com/appkr/c519acc7f14c7e6b87886800b3f85825
      2.2. 웹 프로세스가 아닌 워커 프로세스의 경우에는 Supervisor를 이용해서 프로세스를 관리합니다. 공식 문서의 예제에서는 8개의 워커 프로세스를 띄우고 있네요. https://laravel.com/docs/5.8/queues#supervisor-configuration

      3. 프로세스간 데이터를 주고 받기 위해 데이터베이스, 레디스, SQS, .. 등의 외부 큐 디바이스를 사용합니다. 가령 웹 프로세스가 큐 서버에 작업을 넣고, 큐 워커 프로세스가 작업을 소비하는 식입니다. (자바 등)멀티 쓰레드를 지원하는 경우에도 서버 인스턴스가 스케일링되기 때문에, 단일 인스턴스의 메모리를 이용해서 쓰레드간 메시지를 교환하기 보다는 외부 큐 디바이스를 이용합니다.

      ---

      글로 된 설명만으로 이해가 쉽지 않을 듯 싶습니다. 괜찮은 레퍼런스를 알고 계신 다른 분들이 댓글 달아주시기 바랍니다.
      https://blog.rhostem.com/posts/2018-07-22-web-architecture-101#6-%EC%9E%A1-%ED%81%90job-queue--%EC%84%9C%EB%B2%84

      1. getahead92

        답변 감사합니다 조금더 찾아보면서 공부하고 이해해야겠습니다 


        달아주신 링크 보면서 공부좀 하겠습니다

      CommentAdd your comment...