2010-11-29 4 views
1

다음은 표준 스레딩 모델로 다음을 사용하는 경향이 있지만 그다지 훌륭한 모델은 아닙니다. 사람들이 가지고있는 또 다른 제안이나 이것이 잘 설정되어 있다고 생각합니까? 이것은 고성능 인터넷 서버를위한 것이 아닙니다. 성능은 때로는 매우 중요합니다. 비동기 네트워킹 방법을 사용하고 버퍼를 재사용하는 경우에도 동일한 모델입니다.스레딩 : 네트워킹 스레드, GUI 스레드, 백엔드 스레드 포스트 오피스 중개 클래스 좋은 설정?

gui를 실행하는 GUI 스레드가 있습니다.

계산 집약적 인 모든 것을 처리하는 백엔드 스레드가 있습니다. (기본적으로 gui는 실행하기가 쉽지 않습니다.) 또한 수신 메시지 또는 GUI 작업에 대한 구문 분석 및 처리를 담당합니다.

필요하다면 발신 전송을 여러 개의 소켓으로 분리하고 여러 소켓에서 패킷을 수신하여 메시지로 다시 어셈블하는 하나 이상의 네트워킹 스레드가 있습니다.

네트워킹 및 백엔드 스레드 간의 중재 역할을하는 중간 정적 클래스가 있습니다. 우체국 역할을합니다. 밖으로 나가야하는 메시지는 백엔드 스레드에 의해 게시되고 네트워킹 스레드는이 클래스의 "보낼 편지함"을 검사하여이 클래스에있는 정적 "받은 편지함"에 들어오는 모든 메시지를 보내고 게시합니다 (도착한 소켓에 관계없이). from, 해당 정보가 들어오는 메시지와 함께 게시 되더라도) 백엔드 스레드가 작동해야하는 다른 시스템의 메시지를 찾기 위해 검사합니다.

GUI/백엔드 스레딩 인터페이스는보다 특수한 경향이 있으며 클래스 또는 대체 중개자와 같은 자체 포스트 오피스가 있어야합니다.

이 스레딩 설정에 대한 의견이나 제안이 있으십니까?

답변

0

이 아키텍처는 일반적으로 양호한 것으로 간주되는 고전적인 Model-View-Controller 아키텍처와 비슷하게 들립니다.

1

내 관심사는 실제로 하나의 백 엔드 스레드 만있을 수 있다는 생각에 스스로를 잠그고 싶지 않다는 것입니다. 내 일반적인 모델은 MVC를 처음에 사용하는 것입니다. 사용하는 모든 데이터 구조가 본질적으로 스레드 환경에서는 안전하지 않고, 싱글 톤을 피하고, 미친 듯이 프로파일을 생성하고, 번호를 최소화하려고 시도하면서 물건을 분할합니다 조건 변수 중 내가 활용하고있는 것. 긴 비동기 작업의 경우 새 프로세스를 생성하는 것을 선호합니다. 특히 OS가 다른 우선 순위를 부여하도록하려는 경우가 그렇습니다.