2008-09-28 4 views
0

먼저 금융 세계에서 실시간 시스템의 수용 가능한 종단 간 대기 시간을 200ms 미만으로 설정하고 싶습니다. 알았어, 내가 한 일이야. 실시간 시스템의 설계에는 성능을 향상시키는 (즉, 처리 시간 단축, 확장 성 개선 등) "디자인 패턴"(또는 기술)이 있습니다.실시간 시스템의 성능 향상

예를 들어, 기본 키 할당을 위해 일련 번호 대신 GUID를 사용합니다. GUID의 이론적 근거는 핸들러가 서로 "컨설팅"하지 않는 자체 기본 키 생성기를 가지고 있다는 것입니다. 이것은 병렬 처리가 일어나도록 허용하고 스케일링을 허용합니다.

여기 더 있습니다. 나는 할 수있을 때 목록에 추가하려고 노력할 것이다.

나는 지역 사회의 집단적 지혜에 굴복한다. 감사합니다.

답변

2

일반적인 실시간 시스템 작업의 경우, 일반적인 규칙은 변동성을 제거하고 종료하는 것입니다. 정적 인 일정, 능률적 인 운영 체제, 효율적인 장치 드라이버 및 견고한 우선 순위를 사용하여 실제 하드 실시간을 의미합니다. 알려진 X 시간 내에 계산 X가 끝나길 바란다면 동적이거나 적응성이없는 것은 없습니다.

여기서 내가 말하는 것은 그 점에서 실제로 실시간이 아니며 시스템이 센서 읽기, 계산 제어 루프, 액추에이터 활성화보다 조금 복잡합니다. 제약 사항이 여기에 있다는 것을 아는 것이 더 좋은 세부 사항입니다.

1

이미 Event Driven Architecture에 대해 언급 했으므로 SEDA (Staged Event Driven Architectures)를 살펴 보시기 바랍니다.

스테이지는 기본적으로 이벤트 대기열이며 이벤트를 처리하는 기능입니다. 이 아키텍처에 대한 "자유로운"것은 각 단계가 자체 스레드에서 실행될 수 있으며 함수는 대개 비동기 I/O 등을 필요로한다는 것입니다. 이런 식으로 프로그램을 배열하는 것은 처음에는 어색하지만 모든 종류의 마법을 허용합니다 QoS, 일정 조정 등.

웨일즈의 버클리 논문과 그의 web site을 참조하십시오. yield이라고하는 마이너 고든의 프로젝트 (영국 캠브리지 출신)도보실 수 있습니다. 그는 아주 좋은 결과를 보였습니다. 프로젝트가 처음에는 파이썬에 맞춰져있는 것 같지만 순수한 C++에도 사용할 수 있습니다.

1

기본적으로 소리가 나기 때문에 대부분의 업무용 응용 프로그램은 중복 계산으로 채워지고 제거됩니다. 계산의 리 팩터링은 최적화 패턴의 중추입니다. 처리주기가 나타날 때마다

이주기 내에서 나오는주기와 같은 출력으로 계산됩니다.

다음
for(int i=0;i< x/2; i++) 
    //do something 

안전하게 X/2을하고 cicle 전에 계산하고를 보려면

(현대 컴파일러는 이제 이러한 사소한 최적화를 돌봐) 그 값을 다시 사용할 수 있습니다 : 기본적인 예를 들어 이 간단한 규칙의 파급 효과는 데이터베이스 쿼리에 적용된 예제를 제공 할 수 있습니다.매우 재발하는 필드 요청을 얻으려면 두 테이블의 INNER JOIN을 피하기 위해 정규화 규칙을 위반하고 값이있는 테이블과 관련된 테이블에이를 복제 할 수 있습니다. 이렇게하면 반복적 인 테이블 조인 처리가 방지되고 트랜잭션 중 하나만 테이블을 잠글 필요가 있으므로 병렬화를 해제 할 수 있습니다. 예 :

클라이언트 테이블 querys는 클라이언트 할인을 반복적으로 필요로하지만 할인은 클라이언트 유형 테이블에 저장됩니다.

0

"깨진"것이 확실하지 않은 경우 "수정"하지 마십시오.

가장 먼저해야 할 일은 빠르게 실행해야하는 프로그램에서 블레이즈를 조정하는 것입니다. 내 favorite technique을 사용합니다. 그런 다음 기회가있을 것입니다. 건축을 속일만한 충분한 흔들림 공간이있을 것입니다.