왜 이벤트 기반의 네트워크 응용 프로그램의 본질적으로보다 더 빨리 실을 꿴 것입니까?

StackOverflow https://stackoverflow.com/questions/290128

문제

우리는 모두 읽 벤치마크 및 알-사실 이벤트 기반으로 비동기는 네트워크 서버를 빠르게 보다 자신의 스레드니다.생각 lighttpd 또는 제우스 대아파치 또는 IIS.그 이유는 무엇입니까?

도움이 되었습니까?

해결책

이벤트 기반 VS 스레드 기반은 문제가 아니라고 생각합니다. 비 차단화 된 다중 I/O, 선택 가능한 소켓, 솔루션 대 스레드 풀 솔루션입니다.

첫 번째 경우 사용하는 내용에 관계없이 오는 모든 입력을 처리하고 있으므로 단일 '리스너'판독에 차단할 수 없습니다. 단일 리스너 스레드는 데이터를 각 연결마다 하나가 아닌 다른 유형의 작업자 스레드로 전달합니다. 다시 한 번, 데이터 핸들러가 별도로 실행할 수 있으므로 데이터를 작성하는 데 대한 차단이 없습니다. 이 솔루션은 대부분 IO 읽기/쓰기이기 때문에 CPU 시간이 많지 않기 때문에 응용 프로그램은 원하는대로 수행 할 수 있습니다.

스레드 풀 솔루션에는 각 연결을 처리하는 개별 스레드가 있으므로 각각 '듣기'를 내거나 아웃하는 데 시간을 공유해야합니다. 이 솔루션에서 CPU + IO OPS는 동일한 스레드에 있으며 타임 슬라이스를 가져옵니다. 따라서 IO OPS에서 CPU 시간을 사용하지 않고 전통적으로 수행 할 수있는 스레드 (차단)를 완료하기 위해 기다리고 있습니다.

더 자세한 내용은 비 블로킹 IO를위한 Google과 비교와 스레드 풀도 찾을 수 있습니다.

(누군가 가이 점을 명확히 할 수 있다면 자유롭게 느껴집니다)

다른 팁

이벤트 기반의 응용 프로그램 본질적으로 더 빠르다.

왜 이벤트는 나쁜 생각이(고 Concurrency 서버):

We examine the claimed strengths of events over threads and show that the
weaknesses of threads are artifacts of specific threading implementations
and not inherent to the threading paradigm. As evidence, we present a
user-level thread package that scales to 100,000 threads and achieves
excellent performance in a web server.

이 2003.확실히 주의 스레딩에 현대적인 OSs 는 그 이후로 향상되었습니다.

쓰의 핵심 이벤트를 기반 서버의 의미를 다시 발명 협력 멀티태스킹(Windows3.1 스타일)코드에서 대부분에서는 OS 를 지원하는 적절한 선제 멀티태스킹,의 혜택없이 투명한 컨텍스트 스위칭.이것이 의미가 있는 상태를 관리하는 힙에서는 일반적으로 묵시적 명령에 의해 포인터 또는 저장되어 스택에서 변수입니다.(만약 당신의 언어는,그들을 마감성이 고통을 크게 합니다.이 작업을 수행하기 위해 노력하고 C 이 적은 많은 재미 있습니다.)

이것은 또한 당신이 이득의 모든 사항이 협력 멀티태스킹을 의미합니다.만약 하나 이벤트의 핸들러를 실행하는 어떤 이유로,그것은 노점는 이벤트 실을 뀁니다.완전히 없는 요청습니다.도 긴 CPU invensive 작업을 다른 곳에 이를 방지하기 위해.에 대해 이야기할 때 가장 중요한 핵심 고 concurrency server,'시간이 오래 걸리는 작업은 상대적인 용어의 순서에 마이크로초 단위로 서버에서 처리할 100,000 요청합니다.나는 가상 메모리 시스템지를 끌어 페이지를 디스크에서 당신을 위해!

점점에서 좋은 성능 이벤트 기반 건축물은 까다로운 일이 될 수 있습니다,특히 고려할 때 대기 시간이고 단지 처리량을 자랑합니다.(물론,이미 많은 실수를 할 수 있습으로 스레드니다.동시성은 여전히 어렵습니다.)

몇 가지 중요한 질문의 저자는 새로운 서버 응용 프로그램:

  • 어떻게 실행하는 플랫폼에서 당신이 지원하려는 오늘?그들은 당신의 병목 현상?
  • 는 경우 당신은 여전히 붙어는 나쁜 스레드 구현:왜 아무도 이것을 해결?

그것은 당신이하는 일에 정말로 달려 있습니다. 이벤트 기반 프로그래밍은 사소한 애플리케이션에서는 확실히 까다 롭습니다. 웹 서버가되는 것은 실제로 매우 사소한 잘 이해되는 문제이며 이벤트 중심 및 스레드 모델 모두 현대 OS에서 잘 작동합니다.

이벤트 모델에서보다 복잡한 서버 응용 프로그램을 올바르게 개발하는 것은 일반적으로 매우 까다 롭습니다. 스레드 응용 프로그램은 쓰기가 훨씬 쉽습니다. 이것은 성능보다는 결정 요인 일 수 있습니다.

실제로 스레드에 관한 것이 아닙니다. 스레드가 요청을 서비스하는 데 사용되는 방식에 관한 것입니다. LightTPD와 같은 경우 이벤트를 통해 여러 연결을 서비스하는 단일 스레드가 있습니다. 구형 버전의 Apache의 경우 연결 당 프로세스가 있었고 프로세스가 들어오는 데이터에서 깨어 났으므로 많은 요청이있을 때 매우 많은 숫자를 얻었습니다. 그러나 이제 MPM Apache와 함께 이벤트 기반이 있습니다. 아파치 MPM 이벤트.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top