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

$schedule->command('example:test1')
->everyMinute()
->withoutOverlapping()

$schedule->command('example:test2')
->everyMinute()
->withoutOverlapping()

위와 같이 처리를 하는데,

example:test1 처리가 완료되고 example:test2가 진행되는거 같습니다. 

example:test1rhk example:test2과 동시 처리 가능한가요??


    CommentAdd your comment...

    1 answer

    1.  
      1
      0
      -1

      제목에는 "비동기", 본문에서는 "동시"라는 단어를 쓰셔서 질문을 이해하기 어렵습니다.

      "동시"라는 단어가 "순차(sequential)"의 반대인 "병렬(parallel)"을 의미하신 건가요?

      저도 실험을 해보지 않아서 모르겠습니다. PHP 기본 설치는 쓰레드를 지원하지 않습니다.
      아파치나 엔진엑스를 사용하면 mod_php/fpm(프로세스 관리자)을 사용하므로 멀티 프로세스로 작동합니다.
      여러 개의 터미널 프로세스에서 별도의 PHP 프로세스를 실행했을 때, 멀티 프로세스로 작동하는 것을 확인했습니다(그림 참조, 팅커 명령 하나가 프로세스 세개씩이라 총 여섯개. 왼쪽 PHP 코드 실행에 따른 프로세스는 1번/4번 입니다.).
      그런데, 크론에서는 어떻게 작동하는지 모르겠습니다. 라라벨 스케쥴러가 크론을 사용하는 겁니다.

      => 우선 withoutOverlapping()을 빼고 실험해보시겠어요?

      ---

      => (유스케이스를 잘 모르겠는데요) 두 개의 명령을 합칠 수는 없는 건가요?

      ---

      "비동기"라는 단어가 "시간순"을 의미하신 건가요? A 커맨드가 성공하면 B 작업이 시작되는 케이스를 말입니다.

      => 이때는 A 커맨드에서 B 작업을 큐 잡으로 Dispatch하고, 큐 워커에서 B 작업을 처리할 수 있습니다.

      ---

      두 커맨드간에 어떤 결합성이 있는 지 모르겠지만, 경험적으로 같은 서버에서 동시에 무거운 작업을 수행함으로써 CPU, Memory를 동시에 쓰는 것은 좋지 않았습니다. 데이터베이스를 사용하는 경우라면 더더욱, 두 커맨드 간의 결합도가 크면 Deadlock이 발생할 가능성도 있어서 피하고 있습니다.

        CommentAdd your comment...