비즈니스 시나리오: API 인터페이스에서 데이터를 가져와 데이터베이스에 삽입합니다. 이 프로세스는 멀티스레딩 기술을 사용하여 변환하고 싶지만 시작하는 방법을 모르겠습니다. 다른 방법도 효과가 있을 것입니다.
추가 문장 하나: PHP의 미래 방향이 불분명합니다. Java에는 hadoop, Spark, storm 등과 같은 무거운 것들이 많이 있습니다. PHP는 여기서 어디로 갈까요?
답글 내용:
사실 여기서 정말로 필요한 것은 웹에서 몇 시간 동안 지속되는 "비동기" 작업을 수행하는 방법을 찾는 것입니다. PHP에 관해서는 두 가지 방법이 있습니다:
(1) PHP에서 shell_exec 함수를 사용하여 쉘에서 독립적인 PHP 스크립트 실행을 시작합니다. 이 방법은 실제로 웹 서버를 처리하는 동안 작업을 처리하기 위해 별도의 셸 프로세스를 설정하는 것과 동일합니다. 여기서는 shell_exec의 서버 보안에 특별한 주의가 필요합니다. 매개변수 확인에 주의하고 쉘 명령에 들어가지 않도록 주의하세요. 이는 비교적 구현하기 쉬운 방법입니다.
(2) PHP를 사용하여 서버를 구현하고, 포트에서 수신 대기하며, 웹 측에 서비스를 제공합니다. 여기에는 일반적으로 기본 pthread(멀티스레딩), 오픈 소스 확장 swoole 등과 같은 확장을 사용하는 많은 구현 방법이 있습니다.
웹 프로그램에서 직접 멀티스레딩을 사용하는 것은 일반적으로 시간 제한이 있습니다. 예를 들어 기본 시간 초과는 30초입니다. 스레드 작업이 완료되기 전에 상위 프로세스가 계속 작동하는지 어떻게 확인할 수 있나요?
스울
알았어, Swoole: PHP의 비동기, 병렬, 분산 확장
으로 문제를 해결해 보세요.
PHP의 명령줄 모드를 사용하여 실행할 수 있지만 이는 멀티스레딩이 아니라 멀티프로세스입니다.
더 복잡한 방법으로 gearman을 사용할 수 있습니다.
여러 프로세스를 통해 이 효과를 얻을 수 있습니다.
PHP 자체는 멀티스레딩을 지원하지 않지만 일부 확장 기능을 사용하면 이를 수행하는 데 도움이 될 수 있습니다.
내 의견을 공유하겠습니다.
이 시나리오는 반드시 멀티스레딩으로 해결될 필요는 없습니다. 여러 프로세스를 사용하는 것이 더 안정적입니다.
그 다음은 비즈니스 시나리오입니다. 데이터베이스에 삽입합니다. 어떤 종류의 데이터베이스인가요? 쓰기 잠금 문제 때문이 아닌가요?
PHP는 프로세스, 스레드, 비동기식 등을 사용할 수 있습니다. 이를 수행하는 데 도움이 될 수 있는 전문가가 작성한 확장 프로그램이 많이 있습니다. 비즈니스 시나리오의 성능은 직접 테스트해야 합니다.
PHP의 경우 다른 사람들이 말하는 빠르고 느린 의미와 7에서 개선된 사항에 대해 자세히 알아볼 수 있습니다. 동시에 PHP는 주로 웹 개발 스크립트입니다. 비교의 의미를 이해해야 합니다.
그리고 전문가들은 일반적으로 한 가지 언어만 구사하지 않습니다. 아니면 한 가지 언어에만 집착하지 않는다는 의미이기도 합니다.
모두 흥미롭습니다.
나쁜 점을 지적해 주셨으면 좋겠습니다.
------------------
최신 기사를 읽은 후 대답, 한 문장을 추가하십시오. 사실 '비동기' 솔루션도 괜찮을 것이라고 말하고 싶습니다. 2333
멀티스레딩을 위해 php_pthreads 확장을 사용할 수 있습니다. 장점은 WIN 및 lin 이중 플랫폼을 지원한다는 것입니다. 단점은 PHP를 스레드 안전 모드에서 실행해야 한다는 것입니다.
간단한 비동기의 경우 popen(), fsockopen(), cURL을 고려할 수 있습니다.
더 복잡한 경우에는 PCNTL/pthreads 확장을 고려할 수 있습니다.
더 복잡한 경우에는 메시지 대기열 - 백그라운드 서비스를 고려하세요. > 스울도 있어요!
먼저 mysql이어야 하는 프로그램의 병목 현상을 찾습니다. 병렬 처리로 이 문제를 해결할 수 있는지 여부는 특정 스토리지 구조에 따라 다릅니다.
해결책:
1. 병렬로 작성하는 것보다 훨씬 빠른 mysql을 일괄 작성합니다.
2. PHP 다중 프로세스 프레임워크인 GitHub - huyanping/simple-fork-php: 간단한 다중 프로세스 관리자를 사용합니다. pcntl 기반
Java Thread와 같은 인터페이스 제공