웹 서버와 클라이언트가 병행 처리 요청을 완성하는 3대 방식
웹 서버와 클라이언트는 일대다의 관계이기 때문에 웹 서버는 반드시 여러 클라이언트에게 동시에 서비스를 제공할 능력이 있어야 한다.일반적으로 병행 처리 요청 작업을 완성하는 데는 세 가지 방식이 있는데 그것이 바로 다중 프로세스 방식, 다중 스레드 방식과 비동기 방식이다.
다중 프로세스 방식
, , , 。
다중 프로세스 방식의 장점은 설계와 실현이 상대적으로 간단하고 각 하위 프로세스 간에 서로 독립적이며 클라이언트의 요청을 처리하는 과정이 서로 방해를 받지 않으며 한 하위 프로세스에 문제가 발생할 때 다른 프로세스에 영향을 미치기 쉽지 않기 때문에 서비스의 안정성을 확보한다.하위 프로세스가 종료되면 사용 자원은 운영체제에서 회수되고 쓰레기도 남지 않습니다.단점도 뚜렷하다.운영체제에서 하위 프로세스를 생성하려면 메모리 복제 등 조작을 해야 하기 때문에 자원과 시간에 일정한 추가 비용이 발생할 수 있다. 따라서 웹 서버가 대량의 합병 요청을 받아들이면 시스템 자원에 압력을 주고 시스템 성능이 떨어진다.
초기의 Apache 서버는 이런 방식으로 대외적으로 서비스를 제공했다.대량의 병렬 요청에 대응하기 위해 아파치 서버는''사전 생성 프로세스'메커니즘을 사용하여 다중 프로세스 방식을 개선했다.사전 생성 프로세스의 작업 방식은 이해하기 쉽다.이것은 하위 프로세스를 생성하는 시기를 앞당기고 클라이언트의 요청이 도착하기 전에 미리 생성합니다. 요청이 왔을 때 메인 프로세스는 하위 프로세스와 이 클라이언트를 분배하여 상호작용을 합니다. 상호작용이 끝난 후에 이 프로세스도 끝나지 않고 메인 프로세스에 의해 관리되어 다음 클라이언트의 요청이 오기를 기다립니다.개선된 다중 프로세스 방식은 어느 정도에 대량의 합병 요청 상황에서 웹 서버가 시스템 자원에 대한 압력을 완화시켰다.그러나 아파치 서버는 최초의 구조 설계에 다중 프로세스 방식을 사용했기 때문에 근본적으로 성능 문제를 해결할 수 없다.
다중 스레드 방식
다중 루틴은 다중 프로세스의 방식과 비슷하다. 이것은 서버가 클라이언트를 받을 때마다 서버 메인 프로세스에서 하나의 루틴을 파생하여 이 클라이언트와 상호작용을 하는 것을 말한다.
장점:
운영체제가 하나의 라인을 만드는 비용은 하나의 프로세스를 만드는 비용보다 훨씬 작기 때문에 다중 라인 방식은 어느 정도에 웹 서버가 시스템 자원에 대한 요구를 경감시켰다.
이 방식은 다중 라인을 사용하여 임무 스케줄링을 하고 개발에 있어 일정한 기준을 따를 수 있는데 이것은 상대적으로 규범화되고 협업에 유리하다.
단점: 온라인 스케줄 관리에 있어서 이 방식은 어느 정도 부족하다.
여러 개의 스레드가 같은 프로세스에 위치하고 같은 메모리 공간에 접근할 수 있으며 서로 영향을 미친다.
개발 과정에서 개발자 스스로 메모리를 관리해야 하기 때문에 오류 위험이 증가한다.
서버 시스템은 장시간 동안 끊임없이 작동해야 하기 때문에 오류의 점차적인 축적은 전체 서버에 중대한 영향을 미칠 수 있다.
비동기식
비동기 방식은 다중 프로세스 다중 스레드 방식과 완전히 다른 클라이언트의 요청을 처리하는 방식이다.이 방식을 소개하기 전에, 우리는 먼저 동기화, 비동기화, 그리고 막힘과 비막힘의 개념을 복습합시다.
네트워크 통신 중의 동기화 메커니즘과 비동기화 메커니즘은 통신 모델을 묘사하는 개념이다.
동기화 메커니즘은 송신자가 요청을 보낸 후 수신자가 보낸 응답을 받을 때까지 기다려야 다음 요청을 보내는 것을 말한다.
비동기 메커니즘은 동기화 메커니즘과 정반대이다. 송신자는 요청을 보낸 후 수신자가 이 요청에 응답하기를 기다리지 않고 다음 요청을 계속 발송한다.
동기화 메커니즘에서 모든 요청이 서버에서 동기화되고 송신자와 수신자가 요청에 대한 처리 보조가 일치한다.비동기 메커니즘에서 모든 송신자의 요청이 하나의
대기열, 수신자 처리가 끝난 후 발송자에게 통지합니다.
차단과 비차단은 프로세스 처리 호출 방식을 설명하는 데 사용되며, 네트워크 통신에서 주로
네트워크 소켓의 차단 및 비차단 방식Socket의 본질은 IO 작업입니다.Socket의 차단 호출 방식은 호출 결과가 돌아오기 전에
현재 라인은 실행 상태에서 끊겼습니다. 호출 결과가 돌아올 때까지 기다렸다가 준비 상태로 들어갔습니다. cpu를 가져온 후에 계속 실행합니다.Socket의 차단 호출 방식과 비차단 호출 방식은 정반대입니다. 비차단 방식에서 호출 결과가 바로 되돌아오지 않으면 현재 라인도 끊기지 않고 다음 호출을 실행합니다.
인터넷 통신에서 누군가가 동기화와 막힘을 동일시하고 비동기화와 비막힘을 동일시하는 것을 자주 볼 수 있다.사실 이 두 개념은 일정한 차이가 있기 때문에 혼동해서는 안 된다.두 쌍의 개념을 조합하면 네 개의 새로운 개념이 생겨난다.
동기 막힘, 동기 비막힘, 비동기 막힘, 비동기 비막힘.
동기화 차단 방식: 송신 방향 수신자가 요청을 보낸 후 응답을 기다리고 있습니다.수신자가 요청을 받은 후 진행되는 IO 작업이 바로 결과를 얻지 못하면 결과가 돌아올 때까지 기다렸다가 발송에 응답하고 그 동안 아무것도 할 수 없습니다.이런 방식은 실현은 간단하지만 효율은 높지 않다
동기화 비차단 방식: 수신자에게 요청을 보낸 후 응답을 기다립니다.수신자가 요청을 받은 후 진행하는 IO 작업이 결과에 바로 도착하지 못하면 계속 아래로 호출해서 다른 일을 할 수도 있지만, 결과가 돌아오지 않아 응답하지 않고 결과가 돌아올 때까지 발송자에게 응답하지 않습니다.실제로는 이런 방식을 사용하지 않는다.
비동기 차단 방식: 송신 방향 수신자가 요청을 보낸 후 응답을 기다리지 않고 다른 작업을 진행할 수 있습니다.수신자는 즉시 돌아올 수 없고 막혀서 그 동안 어떤 일도 할 수 없다.실제 업무에서도 이런 방식을 사용하지 않고 일반적으로 비동기적이고 막히지 않는 방식을 사용한다.
비동기 비차단 방식: 송신 방향 수신자가 요청을 보낸 후 응답을 기다리지 않고 다른 작업을 진행할 수 있습니다.수신자가 바로 돌아올 수 없으면 다른 일을 하고 아래로 호출하고 다른 일이 끝나야 돌아오기를 기다린다.IO 작업이 완료되면 완료 상태와 결과가 수신자에게 통지되고 수신자가 발송자에게 응답합니다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.