리눅스에서 스레드는 프로그램 내의 실행 경로, 즉 프로세스 내의 제어 순서를 의미합니다. 모든 프로세스에는 적어도 하나의 실행 스레드가 있습니다. 스레드는 프로그램 실행의 가장 작은 단위입니다. 프로세스 데이터를 공유하지만 자체 데이터도 있습니다.
이 튜토리얼의 운영 환경: linux5.9.8 시스템, Dell G3 컴퓨터.
리눅스 스레드의 개념
스레드란 무엇인가요?
- 프로그램의 실행 경로를 스레드라고 합니다. 보다 정확한 정의는 다음과 같습니다. 스레드는 "프로세스 내의 제어 시퀀스"입니다.
- 모든 프로세스에는 하나 이상의 실행 스레드가 있습니다.
프로세스와 스레드
- 프로세스는 자원 할당과 경쟁의 기본 단위입니다.
- 스레드는 프로그램 실행의 가장 작은 단위입니다.
- 스레드는 프로세스 데이터를 공유하지만 자체 데이터 부분도 갖습니다
- Thread ID
- 레지스터 세트: IP, PSW, 스택 포인터
- stack
- errno
- signal status
- priority
fork와 새 스레드 생성의 차이점
- 프로세스가 포크를 실행할 때 호출되면 새 프로세스 복사본이 자체 변수와 PID를 갖게 됩니다. 이 새로운 프로세스의 런타임은 독립적입니다. 이를 생성한 프로세스와 거의 완전히 독립적으로 실행됩니다.
- 프로세스에서 새 스레드를 생성할 때 새 실행 프로세스는 자체 스택(따라서 자체 로컬 변수)을 갖지만 전역 변수, 파일 설명자 및 신호 처리기를 생성자 및 현재 작업 디렉터리와 공유합니다. 상태.
스레드의 장점
- 새 스레드를 만드는 비용은 새 프로세스를 만드는 것보다 훨씬 저렴합니다.
- 프로세스 간 전환에 비해 스레드 간 전환은 운영체제에서 수행하는 작업이 훨씬 적습니다
- 스레드는 프로세스보다 훨씬 적은 리소스를 차지합니다
- 멀티 프로세서의 병렬 수를 최대한 활용할 수 있습니다
- 느린 I/O 작업이 끝나기를 기다리는 동안 프로그램은 다른 컴퓨팅 작업을 수행할 수 있습니다
- 컴퓨팅 집약적인 애플리케이션을 순서대로 수행 다중 프로세서 시스템에서 실행하려면 계산을 여러 스레드로 분해하여
- I/O 집약적 애플리케이션을 구현하고 시스템을 개선하기 위해 I/O 작업을 중복시킵니다. 스레드는 동시에 다른 I/O 작업을 기다릴 수 있습니다
스레드의 단점
- 성능 손실
- 외부 이벤트에 의해 거의 차단되지 않는 계산 집약적인 스레드는 동일한 프로세서를 다른 스레드와 공유할 수 없는 경우가 많습니다. 스레드. 컴퓨팅 집약적인 스레드 수가 사용 가능한 프로세서를 초과하는 경우 성능 손실이 크게 발생할 수 있습니다. 여기서 성능 손실은 사용 가능한 리소스가 변경되지 않은 상태에서 추가적인 동기화 및 예약 오버헤드가 추가되는 것을 의미합니다.
- 강건성 감소
- 멀티 스레드를 작성하려면 더 포괄적이고 심층적인 고려가 필요합니다. 멀티 스레드 프로그램에서는 공유해서는 안 되는 변수의 공유나 시간 할당의 약간의 편차로 인해 문제가 발생할 가능성이 높습니다. 즉, 스레드 간 보호가 부족합니다.
- 액세스 제어 부족
- 프로세스는 액세스 제어의 기본 세분성입니다. 하나의 스레드에서 특정 OS 기능을 호출하면 전체 프로세스에 영향을 미칩니다.
- 프로그래밍 난이도 증가
- 멀티 스레드 프로그램을 작성하고 디버깅하는 것이 단일 스레드 프로그램보다 훨씬 어렵습니다.
스레드 스케줄링 경쟁 범위
- 운영 체제는 스레드 스케줄링을 위한 다양한 모델을 제공합니다. 응용 프로그램. 이러한 모델 간의 주요 시간 차이는 다음과 같습니다. 시스템 리소스(특히 CPU 시간)를 두고 경쟁할 때 스레드 일정 경합 범위가 다릅니다
- 프로세스 경합 범위: 각 스레드가 동일한 프로세스에 있습니다. "예약된 CPU 시간"을 두고 경쟁합니다(그러나 다른 프로세스의 스레드와 직접 경쟁하지 않음)
- 시스템 경합 범위: 스레드는 "시스템 범위" 내의 다른 스레드와 직접 경쟁합니다.
관련 추천: "Linux 비디오 튜토리얼"
위 내용은 리눅스에서 스레드란 무엇인가?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!