부록 A. 개발자를 위한 팁
- 스레드 사용.
- 불필요한 CPU 발생 및 작동을 효율적으로 사용하지 않습니다. 잠길 필요가 있는 경우 한 번에 모든 작업을 수행하고 가능한 한 빨리 유휴 상태로 두십시오.
- 불필요하게
[f]sync()
사용. - 불필요한 활성 폴링 또는 짧은 일반 타임아웃을 사용합니다. 대신 이벤트로 돌아갑니다.
- wake-up을 효율적으로 사용하지 않습니다.
- 비효율적인 디스크 액세스. 디스크 액세스가 자주 발생하지 않도록 큰 버퍼를 사용합니다. 한 번에 하나의 큰 블록을 작성합니다.
- 타이머를 비효율적으로 사용합니다. 가능한 경우 애플리케이션(또는 시스템 전반에 걸쳐)을 그룹화합니다.
- 과도한 I/O, 전력 사용량 또는 메모리 사용량(메모리 누출 포함)
- 불필요한 계산을 수행합니다.
A.1. 스레드 사용
Python
Python은 Global Lock Interpreter 사용[1]따라서 스레드는 더 큰 I/O 작업에 대해서만 유용합니다. unladen-swallow [2] 더 빠른 Python 구현으로 코드를 최적화할 수 있습니다.
Perl
Perl 스레드는 원래 포크 없이 시스템에서 실행되는 애플리케이션을 위해 생성되었습니다(예: 32비트 Windows 운영 체제가 있는 시스템). Perl 스레드에서는 모든 단일 스레드(Copy On Write)에 대한 데이터가 복사됩니다. 사용자가 데이터 공유 수준을 정의할 수 있어야 하므로 데이터는 기본적으로 공유되지 않습니다. 데이터 공유의 경우 threads::shared 모듈을 포함해야 합니다. 그러나 데이터는 복사될 뿐만 아니라(쓰기 시 복사) 모듈은 데이터에 대한 연결된 변수도 생성하므로 더 많은 시간이 걸리며 속도가 더 느립니다. [3]
C
C 스레드는 동일한 메모리를 공유하고 각 스레드에는 자체 스택이 있으며 커널은 새 파일 설명자를 생성하고 새 메모리 공간을 할당할 필요가 없습니다. C는 더 많은 스레드에 대한 더 많은 CPU 지원을 실제로 사용할 수 있습니다. 따라서 스레드의 성능을 최대화하려면 C 또는 C++와 같은 하위 수준 언어를 사용합니다. 스크립팅 언어를 사용하는 경우 C 바인딩 작성을 고려하십시오. profilers를 사용하여 코드의 잘못된 부분을 식별합니다. [4]