2014-11-27 1 views
0

나는 각 스레드가 많은 정보 블록을 처리하는 10-30 개의 스레드를 갖는 프로그램의 설계 단계에 있습니다.어떤 시점에서 짧은 시간이 CPU util을 줄이기보다는 늘린다

각 블록이 5ms 동안 잠을 자거나 전혀 잠을 못 자고 있습니다. 나는 CPU 부하를 줄이는 것을 선택해야한다.

일반적으로 CPU 사용률을 줄이기 위해 잠자기를 사용하지만 컨텍스트 전환으로 인해 5 밀리 초가 지나면 CPU 사용률이 감소하지 않고 증가 할 수 있습니다.

짧은 수면과 CPU 사용률의 컨텍스트 전환 사이의 관계에 대한 연구가 이미 있습니까?

+0

하지만, 이러한 스레드는 정말 아무것도 할 예정 계산을 제외하고? 예를 들어 I/O가 없습니까? 그들이 시스템 호출을 실행하려고한다면, 나는 잠을 자지 않고 그냥 풀 스피드로 풀어 둡니다. 운영 체제가 대처합니다. 우선 순위를 낮추는 것이 좋습니다 * – EJP

+0

EJP, 내가 설명한 시스템 부분에는 I/O가 없으며 순수 컴퓨팅입니다. 나는 그들의 우선 순위를 낮추는 것을 고려할 것이다. – Lurk21

+1

1GHz에서 작동하는 컴퓨터가 클럭주기 당 하나의 작업을 실행할 수있는 경우 5ms 동안 5 백만 건의 작업이 수행됩니다. 그 시간 동안 컨텍스트 스위치를 * 많이 사용할 수 있습니다! – Gabe

답변

2

수면은 마지막 수단 중 하나입니다. 대신 동시 API에서 도구를 살펴보십시오. 특히 Queue을 사용하면 메시지가 도착할 때까지 작업을 잠자기 상태로 둘 수 있습니다.

또는 Akka을 보면 몇 가지 스레드가 수천 개의 메시지를 처리하는 시스템을 쉽게 구축 할 수 있습니다. 여기서 가장 큰 단점은 Akka 주변에 시스템을 설계해야한다는 것입니다. 실제로는 쉽게 개조 할 수있는 것이 아닙니다.

속도가 가장 중요한 문제인 경우 "Single Producer/Consumer lock free Queue step by step"또는 LMAX Disruptor과 같은 무료 알고리즘을 차단하십시오.

관련 :

0

나는 그것을 테스트했다. 일화에서, 나는 3ms 수면에서 이익을보기 시작했다. 그 후, 각각의 추가 ms로 극적으로 증가했다.

테스트는 Intel Core i3-4130에서 실행되는 30 개의 스레드로 수행되었습니다. 각 스레드는 1000 문자열의 배열 목록을 만들었고, 각 문자열은 무작위로 commons lang으로 생성되었으며 1000 자입니다.

그런 다음 스레드는 셔플 링과 목록 정렬 사이에서 번갈아 나타납니다.

면책 조항 : 이것은 하나의 데스크탑 CPU에 대한 짧은 테스트 세트입니다.

관련 문제