~에서이 답변 - 소프트웨어 스레드와 하드웨어 스레드소프트웨어 스레드는 운영 체제에서 관리하는 스레드입니다. 그러나 나는 사용자 스레드라는 또 다른 용어도 배웠습니다. 이러한 스레드는 커널 스레드가 아닙니다. 즉, 운영 체제는 이러한 스레드에 대해 알지 못합니다. 그렇다면 소프트웨어 스레드에는 사용자 스레드가 포함됩니까?
stackoverflow에서 아무런 답변을 얻지 못했지만 Linux의 맥락에서도 아이디어가 동일하다고 생각합니다. Linux에서 사용되는 용어에 대해 묻고 있습니다. 감사합니다.
참고로 제가 찾아본 결과Quora의 유용한 리소스.
답변1
이는 종종 용어가 과잉되는 영역입니다. 동일한 용어라도 상황에 따라 다른 의미를 갖습니다. 다양한 용어와 관련된 의미가 시간이 지남에 따라 자주 변한다는 사실은 도움이 되지 않으므로 읽고 있는 텍스트의 연령이 중요합니다.
구별해야 할 측면이 많거나 적어도 두 가지 주요 측면이 있습니다.
- 사용자 스레드와 커널 스레드는 실행 컨텍스트 또는 관리 컨텍스트를 참조할 수 있습니다. Linux의 "커널 스레드"는 일반적으로 전자를 나타냅니다. 커널 스레드는 커널 목적을 위해 커널 내에서 실행되는 스레드입니다( 에서는
ps
대괄호 안에 이름이 있는 프로세스로 표시됩니다.예를 들어[kthreadd]
,[khugepaged]
...). - SO 답변에서 언급했듯이 소프트웨어 스레드와 하드웨어 스레드는 문제의 스레드의 특성을 나타냅니다. 두 경우 모두 스레드의 개념은 여러 실행 스레드를 병렬로 실행한다는 아이디어입니다. 소프트웨어 측면에서는 가벼운 프로세스이고, 하드웨어 측면에서는 "경량" CPU(Intel 용어로 하이퍼스레딩)입니다.
당신이 언급하는 "사용자 스레드"는 일반적으로녹색 선. 커널 개입 없이 사용자 공간에서 관리되는 소프트웨어 스레드입니다. 커널 및 사용자 공간에 구현된 많은 개념과 마찬가지로 비용 인식이 변화함에 따라 시간이 지남에 따라 그 사용도 발전했습니다. 과거에는 다른 운영 체제에서 커널이 스레드를 잘 지원하지 않았기 때문에 사용자 공간에 구현되었습니다. 커널이 개선되고 소프트웨어가 커널 스레드를 사용하기 시작했습니다. 그런 다음 새로운 환경에서 커널 스레드가 너무 비싸다고 판단하여 실제로 그런 일이 일어났습니다.
귀하의 질문에 대답하자면, 사용자 스레드는 소프트웨어 스레드이므로 "소프트웨어 스레드"라는 용어에는 이를 포함합니다.