2012-09-22 1 views
0

대 I에 유래라는 일부 페이지의 배지 시스템에 대한이 블로그 Easy Background Tasks 읽고 있었다 : P를, 그래서 댓글들이 작업을 수행하는 서비스로 끝난 것을 말한다에 있지만, 예를 들어 :스레드 서비스

사용자가 시간 T2 후 시간 T1이 작업은 사용자 의 X 번호의 따라 에서 작업을 수행, 당신 때문에 실시간으로 경험

내가이 말을 일부 DB 쿼리를 실행하고 사용자 (이메일 또는 무엇이든)를 통지 할 필요가, 그래서 여기있는 질문은 스레드를 사용하는 경우 1000 명의 사용자가 작업을 수행한다고 가정하면 1000 개의 대기 스레드가 있으므로 잠시 동안 reci가 생깁니다. clyng 또는 어떤 이유로 서버가 종료되면이 모든 작업이 손실됩니다. 타이머를 사용하면 같은 상황이 종료됩니다.

서비스를 사용하면 온라인 게임과 같은 실시간 경험이 손실됩니다.

그래서, 이런 종류의 물건을 다루는 방법?

+3

타이밍이 중요하지 않은 경우에만 "백그라운드 작업"을 사용합니다. 확실히 SO 배지의 경우, 아무도 배지가 1 분 늦게 수여되면 불평 할 것입니다. "실시간"이 중요하다면 배경 작업을 고려하지 마십시오. 그리고 ** 대기 스레드 수천 개를 생성하는 코드를 작성하지 마십시오. –

+0

예를 들어 다음 시간에 배지를 부여하면 불만을 토로합니다. 그래서, 스레드는 여기에 옵션이 없습니다. 왜냐하면 제가 천 가지를 만들어야하기 때문입니다. 그래서 무엇을 제안합니까? 예를 들어,이 everty hour를 확인하는 서비스는 무엇입니까? –

답변

3

스레드 및 신호를 사용할 때는주의해야합니다. 솔루션은 시나리오의 세부 사항에 따라 다르지만 확장 가능한 솔루션 중 하나는 이고입니다.

시나리오에 따르면 스레드 풀 사이에는 항상 제한된 수의 사용 가능한 스레드가 있으므로 스레드 간 신호 전달은 효율적이지 않습니다. 그러나 게임 디자인에 따라 스레드를 보유 할 최대 사용자 수를 알고있는 경우 WaitHandles (AutoResetEvent 및/또는 ManualResetEvent)를 사용하여 신호를 사용하여 스레드간에 신호를 보낼 수 있습니다. 그러나 당신은 Global.asax에

  int availableThreads; 

      int availablePorts; 

      ThreadPool.GetAvailableThreads(out availableThreads, out availablePorts); 

      ThreadPool.SetMinThreads(availableThreads, availablePorts); 

의 Application_Start 이벤트 처리기에서 풀에 사용할 수있는 스레드 수 증가가 도움이되기를 바랍니다했는지 확인합니다.

+0

thead pool은 정말 좋은 옵션처럼 들리지만 각 사용자의 N 개의 스레드를 만들어야하므로 내 스레드 수가 사용자 당 스레드의 합계가됩니다. 그럼, 아직도 스레드 풀을 사용해야합니까? –

+0

각 사용자에게 타이머 및 해시 테이블 (사용자 별 데이터 수집 용)을 추가하는 것이 좋습니다. 스레드 사용에는 항상 한계가 있습니다. 사용 가능한 최대 스레드 수는 다음 수식으로 계산할 수 있습니다. Max_Available_Threads = 250 * [No_CPU_CORE]. 따라서 12 코어 CPU 시스템에서 실행중인 경우 최대 3,000 개의 사용 가능한 스레드가 있습니다. 따라서이 숫자를 기반으로 쓰레드를 사용하는 것은 게임에서 많은 수의 사용자에게 적합하지 않습니다. – Houman

+0

답변 해 주셔서 감사합니다;) –

관련 문제