2012-01-29 6 views

답변

3

"블로킹"이란 스레드가 리소스가 사용 가능하게 될 때까지 기다려야한다는 것을 의미합니다. 즉, 정의 상 스레드는 리소스 대기를 기다리고 있습니다. 비 차단은 이런 종류의 일을 피합니다.

일반적으로 논 블로킹 솔루션은 이라고 더 까다 롭지 만 리소스 경쟁이 발생하지 않으므로 확장이 훨씬 용이합니다. (즉, Channel의 요점은이 작업을 덜 까다롭게 만드는 것입니다.)

+1

비 블로킹 I/O는 스레드가 대기하지 않는다는 것을 의미하지는 않으며 대기 작업이 I/O 작업과 별개임을 의미합니다. –

6

스레드 스택은 대개 비동기 I/O 연결을 지원하는 데 필요한 데이터 구조보다 훨씬 크기 때문에. 또한 수천 개의 스레드 스케줄링은 비효율적입니다.

+3

저는 데스크탑 컴퓨터에서 수만 개의 스레드를 실행할 수 있지만, 실제로 모든 것이 멈추지 않고 단일 시스템에서 수만 연결을 제공 할 수 있습니다. 그래서 그것은 나에게 약한 논쟁처럼 보입니다. 또한 셀렉터를 사용하는 NIO 논 블로킹은 종종 좋은 선택이 아닙니다. (http://www.mailinator.com/tymaPaulMultithreaded.pdf) – Voo

+0

@Voo : 일부 연결은 한 번에 수십 분 동안 유휴 상태 일 수 있지만 여전히 유휴 상태 일 수 있습니다 열다. –

+1

@Voo, 나는 당신이 수만개의 Runnable (공회전이 아닌) 스레드를 가지고 있는지 의심 스럽다. 컨텍스트 스위치가 여전히 저렴한 TLB 캐시는 더 많은 캐시 미스가 있습니다. 수천 개의 연결에서 나는 듀얼 소켓 제온에서 약 2 만 명의 사용자에게 85k 메시지/초를 제공하는 데 20 % CPU (모든 CPUS)를 사용한다고 말하고 싶습니다. 또한 NIO는 '공정한'트래픽 전달을 허용합니다. 중요하고 매우 자주 간과되기 때문에 고객에게 안정적인 대기 시간을 보장합니다. (Iirc 벤치 마크는 대기 시간을 측정하지 않습니다.) – bestsss