PHP 멀티스레딩과 관련하여 우리는 많은 문제에 직면하게 될 것입니다. 다음 기사는 PHP 멀티스레딩과 관련된 소규모 프로젝트 문제에 관한 것입니다. 동시에 세 가지 솔루션을 참조하십시오.
프로젝트 상황:
300W 이상의 사용자 데이터를 qcloud에 동기화하려면 한 번에 하나의 컬만 동기화할 수 있습니다. 초당 약 3번의 동기화가 필요합니다. 300W 데이터를 동기화하려면 10일 이상 걸릴 것으로 예상됩니다. 멀티스레딩을 사용하여 해결합니다.
옵션 1:
C++로 다중 프로세스 솔루션을 작성하고 여러 프로세스를 분기하여 문제를 해결합니다. 메인 스레드는 데이터 읽기/저장을 담당하고, 하위 스레드는 컬을 담당합니다.
옵션 2:
옵션 1과 마찬가지로 PHP를 사용하여 다중 프로세스 솔루션을 작성합니다. 기본 스레드는 읽고 하위 스레드는 컬됩니다.
그러나 PHP에는 다중 프로세스가 없기 때문에 스레드/프로세스를 직접 제어할 수 없습니다. 따라서 우리는 다중 프로세스를 구현하기 위해 Linux에만 의존할 수 있습니다.
PHP 함수 pcntl_fork()는 Linux의 포크와 동일한 프로세스를 생성할 수 있습니다.
fork와의 차이점은 pcntl_fork에서 반환된 0이 하위 프로세스이고 반환된 ID가 하위 프로세스의 pid라는 것입니다(fork는 상위 프로세스에 대해 0을 반환하고 하위 프로세스는 ppid를 반환함). Linux에 pcntl_fork() 함수가 있어야 한다고 위와 같이 작동되겠지만 pcntl.so 모듈을 로드해야 한다고 하는데 작동하지 않는 것 같습니다.
옵션 3:
php+shell은 멀티스레딩을 시뮬레이션합니다.
예: test.php 파일은 프로젝트에 필요한 기능(데이터베이스 읽기 및 쓰기, 컬 포함)을 구현합니다.
다음과 같이 다른 셸을 작성하고 저장합니다. as start.sh:
#!/bin/bash //指定bash,必须for(( i=0; i<20; i++))do php test.php & //执行test.php,&符号的意思是把该操作放在后台执行,这样shell就可以继续执行下一步sleep命令了。如果没有这个符号,shell会阻塞在这里。 sleep 1s done
마지막으로 쉘을 실행하면 sudo ./start.sh
shell은 20개의 프로세스를 시작하고 각각 test.php를 실행합니다
그러나 각 프로세스는 메인 프로세스와 동일하므로 공통 리소스가 어렵습니다. 이 경우 공용 리소스는 데이터베이스뿐이므로 데이터베이스를 운영할 때마다 자세한 내용은 내 다른 기사를 참조하세요. mysql 잠금. 기본적으로 1초마다 해결되는 데이터베이스 작업에 비해 컬은 수백 개의 메시지를 연속해서 보내는 데 수십초 이상이 걸리기 때문에 데이터베이스 잠금이 미치는 영향은 거의 없습니다.
요약: 이것은 PHP 멀티스레딩에 관한 작은 사례일 뿐이지만 모든 사람이 두뇌를 사용할 수 있기를 바라며 이 기사가 그러한 문제를 해결하기 위한 아이디어를 얻을 수 있기를 바랍니다.
관련 권장 사항:
java - pthreads는 PHP 멀티스레딩입니다. 소켓 - PHP 멀티스레딩, 멀티프로세스 사용PHP에서 멀티스레딩을 구현하는 두 가지 방법위 내용은 PHP 멀티스레딩 소형 케이스의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!