12 개의 클라이언트 (N
= 10-100)를 제공하는 네트워킹 제품의 백엔드를 개발 중입니다. 각각의 연결은 2 회의 주기적 작업, 즉 하트 비트와 SSH를 통한 텔레 메 트리 다운로드를 필요로하며, 각각은 H
Hz입니다. 프론트 엔드에서 나오는 다른 종류의 이벤트도 있습니다. 모든 작업의 성격 상, OS가 응답을 기다리는 동안 다른 클라이언트를 제공하기 위해 자주 스레드간에 전환 할 수 있도록 각 연결의 소켓에서 select
호출을 기다리는 견고한 부분이 있습니다.인텔 TBB 네트워크 연결 서비스 - 좋은 모델입니까?
초기 구현에서는 하트 비트, 원격 측정, 추가) 당 3 개의 스레드를 생성하고 각각 단일 조건 변수를 기다리고 있습니다.이 변수는 작업 큐에서 수행 할 작업이있을 때마다 겹쳐서 표시됩니다. 작업 대기열은 타이머와 프론트 엔드의 명령을 사용하여 위에서 언급 한주기적인 이벤트로 채워집니다.
여기에 몇 가지 질문이 있습니다.
작업자 스레드 풀 접근 방식을 Intel TBB 작업으로 전환하는 것이 좋습니까? 그렇다면 어떤 스레드 값을
tbb::task_scheduler_init
으로 초기화해야합니까? 300 개 스레드signal
ED 초당N * H * 3
번이고 조건 변수에 대기와 현재의 접근법에서- , (특히
signal
호출 측) 확장 성을위한 병목 현상이 예상된다. 작업 당 한 명의 작업자 만 깨우는 더 좋은 방법이 있습니까? TBB에서 워킹 스레드 깨우기는 어떻게 이루어 집니까?
의견을 보내 주셔서 감사합니다.
N = 10000을 의미합니까? '선택'기능은 FD_SETSIZE 연결 이상을 선택할 수 없습니다. FD_SETSIZE는 보통 1024 – jondinham
3 개의 스레드/연결입니까? 나는 30,000 개의 스레드를 만드는 것이 다소 어려움을 느낀다. – jondinham
나는 10에서 100까지를 의미했다. select 호출은 libssh2 파이프 라인에 있으며, 하나의 소켓 만 담당한다. – Tosha