2012-06-08 4 views
0

정확하게 멀티 스레딩이 확장 성 문제를 해결하는 방법을 알고 싶습니다. 기본적으로 요청은 새로운 스레드에서 요청이 들어 오면 요청을 처리하는 것입니다.하지만 장면 뒤에서 정확히 무엇이 발생 하는지를 이해해야합니다.멀티 스레딩은 정확히 어떻게 작동합니까?

현재 GET, PUT, DELETE 작업을 처리하기 위해 스토리지 클라우드를 구축해야하는 프로젝트를 시작하고 있습니다. 멀티 스레딩 주소 확장 성 또는 이벤트 서버를 조사해야합니까?

+1

어떤 연구를 수행 했습니까? 여기를 참조하십시오 : http://meta.stackexchange.com/a/128553/152851 – Gray

답변

0

멀티 스레딩이 더 좋은 점은 멀티 코어 계산입니다.

일반적으로 이벤트 실행 모델은 코드 실행을 완전히 제어 할 수 있으므로 더 가볍습니다. 예를 들어, 현재 HTTP 헤더를 가져와 처리하고 있고 다른 스레드가 깨어나야 할 경우 다음을 의미합니다.

  • 전체 프로세서 상태가 저장됩니다.
  • 현재 cpu 캐시가 patrly thrashed됩니다;
  • 일부 코드가 실행됩니다.
  • 전체 프로세서 상태가 복원됩니다.

이벤트 모델에서는 전체주기를 종료하고 데이터를 저장할 수있는 권한이 있으며 다른 이벤트로 이동합니다. 두 번째 행사는 직장을 마칠 때까지 기다릴 것입니다. 그러나 작업 코드 하이재킹으로 인해 발생하는 시간은 일반적으로 훨씬 더 큽니다.

메모리 관리도 중요합니다. 스레딩 모델에서는 중요한 데이터에 대한 액세스를 동기화하기 위해 잠금이 필요하지만 이벤트 모델에는 스레드 별 데이터에 대한 잠금이나 추가 메모리가 필요하지 않습니다.

웹 서버의 핵심이기도합니다.이 방법으로 nginx는 시스템을 스 래싱하지 않고도 수천 개의 연결을 처리 할 수 ​​있습니다.

+0

감사합니다. Kworr.That 확실히 도움을 위해. – Sudhagar

1

다중 스레드를 사용하면 한 번에 둘 이상의 스레드를 실행할 수 있습니다. 멀티 코어 시스템에서는 두 개의 스레드 이 실제로 병렬로 실행될 수 있다는 것을 의미하며 한 번에 하나씩 실행하는 작업을 두 번 수행합니다. 이상적으로, 4 개의 코어 머신에서 4 개의 스레드를 사용하면 하나의 스레드와 거의 동일한 작업을 수행 할 수 있습니다.

이 작업을 수행하려면 은 다소 독립적으로 실행되는 여러 스레드로 해결해야하는 문제가 필요합니다. 프로그램을 스레드로 나누는 방법을 이해하려면 상당히 영리해야합니다. 그리고 대부분의 경우, 이 실제로 일 필요가 있습니다.이 스레드는 각 스레드가 서로의 데이터를 삭제하지 못하도록 (또는 더 나쁘게 미묘하게 방해하지 않도록) 유지해야합니다. 같은 프로그램의 다른 세션과 같이 스레드를 거의 독립적으로 실행할 수 있지만 때로는 가능합니다.

멀티 스레딩은 모든 코어가 작동한다는 점에서 다릅니다. 4 코어 머신에서는 4 배나 많은 작업을 처리 할 수 ​​있습니다. 16 코어 머신으로 업그레이드하면 4 배 증가합니다. 정말 영리한 프로그래밍을한다면 말이죠. 경쟁자보다 50 % 더 빠르다고 자랑한다면, 경쟁자보다 먼저 멀티 스레딩을 선택하는 것이 좋습니다.

그렇지 않으면 단일 스레드 솔루션을 사용하십시오. 훨씬 더 간단합니다. (수천 개의 데이터가 나에게 많은 소리를 내지 않는다. 수백만 개가 될 수 있다면 멀티 스레딩이 그만한 가치가있을 수있다.)

0

일반적으로 일반적인 HTTP 실행에는 많은 I/O가 포함되어 있기 때문에 멀티 스레딩이 도움이 될 수있다. 그리고 IO 작업은 무거워 많은 시간이 걸리는 것을 알고 있습니다.따라서 실제적으로 클래스 A의 인스턴스와 클래스 B의 인스턴스를 가져와야하는 요청이 하나있을 때 A 스레드 인스턴스에 액세스하기위한 스레드 2 개와 데이터베이스에서 클래스 B 인스턴스에 액세스하는 다른 스레드를 생성하면 클래스 B의 인스턴스를 가져올 수 있습니다. 별도의 스레드에 각 인스턴스를로드하면 스레드 B가 IO에서 차단되고 반대로 스레드 A가 코드를 실행하는 확률이 높아집니다. 따라서 멀티 스레딩을 사용하면 IO 처리 시간을 확보 할 수 있습니다.

첫 번째 이점. 다중 스레드를 사용할 때 수신 연결에 대해 홀 스레드를 예약 할 필요없이 비동기 이벤트 처리 모델을 사용하는 또 다른 이점이 있습니다. 초당 50 000 + 요청을 처리 할 수있는 netty이라는이 기술을 사용하는 훌륭한 구현이 있습니다.

관련 문제