프로세스 당 10,000 개의 스레드를 처리하도록 Linux 서버 최적화
다른 사람들이 설명했듯이 이것은 일반적으로 잘못되었습니다. 스레드는 비용이 많이 드는 자원 은 자신이 특히 때문에, 호출 스택 (일반적으로 메가 바이트)를하고 커널 작업 스케줄이기 때문이다. 스레드는 열린 파일 디스크립터 보다 훨씬 비쌉니다 .
운영 체제 : 세 가지 쉬운 자료 (무료로 다운로드 할 수있는 교재)를 읽으십시오 .
일반적으로 스레드가 많지 않고 실행 가능한 스레드가 많지 않기를 원합니다. 실행 가능한 스레드의 수는 일반적으로 최대 수의 코어 (또는 그 수의 작은 배수) 여야 하므로 최대 약 12 개입니다. 프로세스의 스레드 수는 약간 더 클 수 있습니다. 따라서 프로세서 소켓과 코어가 많은 매우 광범위한 서버가 없다면 프로세스에서 (데스크탑) 프로세스에 12 개 이상의 실행 가능한 스레드와 100 개의 스레드 (대부분 유휴 상태)를 원하지 않습니다. .
Linux에서 스레드와 프로세스는 매우 유사합니다 (둘 다 clone (2)에 의해 생성 될 수 있음 ). 그리고 둘 다 커널에 의해 예약 된 작업입니다. 실제로 커널 스케줄러는 일부 멀티 스레드 프로세스 내부의 스레드 또는 단일 스레드 프로세스의 단일 주 스레드 (이 경우 단일 프로세스의 이름을 "프로세스") 또는 커널 스레드 일 수있는 작업을 예약합니다. 데스크탑 시스템에서 총 천 개 이상의 예약 가능한 작업을 원하지 않을 것입니다.
Linux에서 프로세스 는 단순히 동일한 가상 주소 공간 을 공유하고 파일 디스크립터 테이블 등과 같은 다른 것들을 공유하는 스레드 그룹입니다 . 일부 프로세스에는 스레드가 하나만 있습니다.
가상 주소 공간이 되어 정의 로 위키 백과에 의해
"운영 체제에서 프로세스에 사용 가능한 가상 주소 범위 세트"
(또한 볼 이 대답 용어가 보편적 아니라고 설명을하고, 일부 Microsoft 설명서는 사용하는 다른 과 호환되지 않는 정의).
Linux에서 proc (5) 는 일부 프로세스의 가상 주소 공간을 이해하는 데 유용합니다. 터미널
cat /proc/self/maps
과 cat /proc/$$/maps
터미널에서 모두 시도하십시오 . 참조 이 , 그리고 에서 pmap (1) 및 PS (1) 및 최고 (1) .
모든 사용자 공간 프로그램은 일부 프로세스에서 실행되고 가상 메모리를 사용 하므로 모든 프로세스에는 고유 한 가상 주소 공간이 있습니다. 물리적 RAM 은 Linux 커널에서 관리하는 리소스이며 응용 프로그램은 RAM에 직접 액세스 할 수 없습니다 ( mmap (2) -ing 제외 /dev/mem
, mem (4) 참조 ).
따라서 프로세스는 직접 RAM을 사용하지 않습니다 . 가상 메모리를 사용하며 자체 가상 주소 공간이 있습니다. 커널은 사용합니다 페이징 물리적 RAM의 관리 페이지를 가상 주소 공간 및 프로세스 제공하는 추상화를 . 프로세스가 유휴 상태이거나 실행중인 경우에도 커널은 일부 페이지를 페이지 아웃 할 수 있습니다 (예 : 디스크에서 스왑). 커널은 MMU를 구성하고 있습니다 (그리고 디스크에서 페이지를 가져 오거나 세그먼트 오류 를 프로세스 로 전파하여 일부 인터럽트 핸들러 에서 페이지 누락 하드웨어 예외 처리, signal (7) 참조 ).
시스템 스레드 위에 녹색 스레드 가있을 수 있지만 녹색 스레드 라이브러리는 구현 및 디버그하기가 어렵습니다. Go 에서 사용 된 고 루틴을 살펴보고 멋진 예를 들어보십시오. setcontext (3) 도 참조하십시오 .
때때로 시스템이 스 래싱을 실험 할 수 있습니다 . 이것은 모든 프로세스에 필요한 총 가상 메모리가 사용 가능한 실제 RAM을 크게 초과 할 때 발생합니다. 그런 다음 컴퓨터가 응답하지 않게됩니다. 상주 세트 크기 , 요구 페이징 , 작업 세트 , 메모리 초과 확약 , ASLR 에 대해 읽으십시오 .
-for Linux- fork (2) , clone (2) , mmap (2) , madvise (2) , posix_fadvise (2) , mlock (2) , execve (2) , credentials (7) , pthreads (7) 참조 , futex (7) , capability (7) .