2009-11-28 2 views

답변

0

간단히 말하면, 가장 확실합니다. 몇 가지 토론을 읽으십시오.

서비스 튜닝은 예술 형식이거나 벤치마킹이 필요합니다 (그리고 벤치 마크에 필요한 많은 양의 공간이 큽니다). 나는 그것이 다음과 같은 요인들에 달려 있다고 믿는다 (이것은 완전한 것이 아니다). 작업자 스레드는

    준비 qeueue에서 포착 된 항목을 처리하는 데 걸리는 시간이 얼마나
  1. 자신의 얼마나 많은?
  2. 생산자는 몇 명이며 얼마나 자주 생산합니까?
  3. 어떤 대기 개념을 사용하고 있습니까? 스핀 락이나 커널 대기 (후자는 더 느리다)?

그래서, 항목들은 생성 된 경우, 스레드의 양이 크고, 처리 시간이 부족한 경우, 상기 데이터 구조 따라서 탈곡 일으키는 큰 윈도우에 대해 고정 될 수있다.

다른 요소에는 사용 된 데이터 구조 및 연결된 구조가 포함 된 큐를 관리하기 위해 연결된 목록을 사용하는 경우 데이터 구조가 잠기는 시간이 포함될 수 있습니다. addremove oprations는 일정 시간이 소요됩니다. 항목이 added 일 때 프리 오 대기열 (힙)은 평균적으로 몇 가지 작업을 더 많이 수행합니다.

시스템이 방금 사용하여 사진에서이 질문에 걸릴 수 처리 사업을위한 경우 :

  1. 프로세스 기반의 아키텍처로 그냥 여러 생산자 소비자 프로세스를 산란 및 통신을 위해 파일 시스템을 사용하여,
  2. stackless python, Lua 또는 Erlang과 같은 비 우선적 협업 스레딩 프로그래밍 언어를 사용합니다.

참고 : 동기화 원시는 not good 인 프로세서 간 캐시 응집 플러드를 야기하므로 가끔 사용해야합니다.

논의가 박사 학위 논문을 채우기 위해 갈 수 : D

0

준비 큐는 데이터 구조에 대한 자연 선택입니다 당 CPU를했다. 이것은 대부분의 운영 체제가 동일한 CPU에 프로세스를 유지하려고하기 때문입니다. 여러 가지 이유로 인해 Google을 사용할 수 있습니다. 그게 무엇을 의미합니까? 스레드가 준비 상태이고 다른 CPU가 유휴 상태이면 OS는 스레드를 다른 CPU로 신속하게 마이그레이션하지 않습니다. 로드 밸런싱은 장기적으로 만 실행됩니다.

상황이 다르다면, 스레드 - CPU 친화력을 유지하는 것이 디자인 목표가 아니라 스레드 마이그레이션이 자주 발생하고 CPU 당 실행 큐를 별도로 유지하는 것이 비용이 많이 든다는 것입니다.

관련 문제