> 백엔드 개발 > PHP 튜토리얼 > C/C++나 Java에 비해 PHP가 부족한 것은 무엇입니까? 멀티스레딩, 멀티스레딩, 멀티스레딩…

C/C++나 Java에 비해 PHP가 부족한 것은 무엇입니까? 멀티스레딩, 멀티스레딩, 멀티스레딩…

伊谢尔伦
풀어 주다: 2023-03-01 12:00:02
원래의
1221명이 탐색했습니다.

어제 전 동료와 대화를 나누다가 PHP와 Swoole에 대해 불평했습니다. 그는 PHP에는 함정이 많고 PHP에는 큰 한계가 있다고 믿었습니다. PHP+Swoole은 동시성이 높은 서버에는 적합하지 않으며 C+Swoole이 가장 적합한 솔루션입니다. C++에는 다양한 데이터 구조가 있으며, C++에서는 스레드를 열 수 있고, C++에서는 객체를 공유할 수 있습니다. 꼼꼼히 설명할 필요가 있을 것 같습니다.

C/C++나 Java에 비해 HP가 부족한 것은 무엇입니까? 멀티스레딩, 멀티스레딩, 멀티스레딩...

그렇습니다. PHP는 C/C++ 및 Java보다 스레드 수가 적습니다. PHP에는 다중 프로세스 솔루션만 있으므로 PHP의 전역 변수와 개체는 공유되지 않으며, 프로세스 간에 데이터 구조를 작동할 수 없으며, 소켓 파일 설명자를 공유할 수 없습니다. 그렇다면 PHP에는 제한이 있나요?

멀티스레딩은 멀티프로세싱보다 훨씬 더 강력한 것 같습니다. 사실 멀티스레딩이 더 많은 함정을 가져온다고 책임감 있게 말씀드릴 수 있습니다.

데이터 동기화 문제로 인해 충돌이 발생합니다. 성능을 희생하고 모든 곳에 잠금을 추가하거나, 잠금이 필요 없는 동시 프로그래밍을 사용하세요. 제가 아는 한, 이 기술을 마스터할 수 있는 사람은 중국에 거의 없습니다.

잠금을 추가하면 모든 것이 괜찮을 것이라고 생각하지 마십시오. 교착 상태 문제가 발생합니다. 프로그램 논리가 복잡해지면 잠금을 제어하기가 점점 더 어려워집니다. 일단 교착 상태가 되면 프로그램은 기본적으로 실패하게 됩니다.

특정 스레드가 정지되면 모든 스레드가 종료됩니다.

대신 여러 프로세스를 살펴보는 것이 실제로는 훨씬 간단합니다.

프로세스 간 통신을 사용하면 기본적으로 모든 데이터 공유가 가능합니다. 예를 들어 프로세스는 데이터 구조와 객체를 구체적으로 저장하는 데 사용되며 다른 프로세스의 모든 데이터 작업은 이 프로세스에 전달됩니다.

여러 프로세스에는 잠금이 필요하지 않습니다

여러 프로세스가 사용할 수 있습니다. 일부 멀티스레딩 기능을 구현하기 위한 공유 메모리 데이터 구조. 예를 들어 Swoole에서 제공하는 Table과 Atomic은 데이터 공유를 실현할 수 있지만 비용이 매우 저렴합니다. 공유 메모리 대기열도 향후 추가될 예정입니다

소위 PHP 제한 Swoole은 전혀 말도 안되는 소리입니다. Swoole에서 제공하는 Table, Atomic, SendMessage/PipeMessage, Task를 적절히 활용하면 비동기식, Non-Blocking 코드 로직을 완벽하게 구현할 수 있습니다.

C++로 작성된 프로그램이 성능이 더 좋다?

이것은 완전히 맹목적인 미신입니다. C++는 계산 집약적인 프로그램에 이점이 있습니다. 동시 서버의 핵심은 대규모 집약적 컴퓨팅이 아닌 IO입니다. C++는 언어 관점에서 장점이 없습니다. 또한 C++의 대부분의 데이터 구조에는 PHP에서 해당 구현이 있습니다. 이것이 가능하지 않은 경우에도 특수 확장을 직접 작성하여 문제를 해결할 수 있습니다.

동시성이 높은 단일 서버는 10W 연결을 유지할 수 있으며 초당 3~5W 주고받는 메시지를 처리할 수 있습니다. 이 수준의 성능은 이미 BAT의 핵심 시스템에 적용될 수 있습니다.

빠른 개발 효율성이란 무엇을 의미하나요?

이 동료는 PHP 서버 개발이 C++보다 빠르지만 궁극적인 성능을 추구하려면 여전히 C++가 필요하다고 말했습니다. 효율적이라는 것이 무엇을 의미하는지 말씀드리겠습니다. 좋은 프로그램을 개발하는 것은 쉬운 일이 아니며 프로그래머에게는 많은 시간과 에너지를 투자해야 합니다. 개발 효율성 향상의 의미는 단순히 더 짧은 시간에 작업을 완료할 수 있다는 것이 아니라 남은 시간에 단위 테스트 추가, 버그 수정, 사용자 경험 개선, 세부 사항 개선, 지원 도구 제공, 성능 최적화, 키 추가 등을 할 수 있다는 것입니다. 로그를 기록하고 경보를 모니터링하고 재해 복구 계획을 추가합니다.


관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿