[java] 녹색 스레드 대 비 녹색 스레드

이러한 유형의 스레드가 제공하는 이점을 이해하고 싶습니다.

  • 어떤 환경에서 녹색 스레드가 녹색이 아닌 것보다 낫습니까? 일부는 녹색 스레드가 멀티 코어 프로세서에 더 좋다고 말합니다.

  • 예상되는 모든 동작 문제.



답변

Wikipedia 기사 Green Threads 는이를 매우 잘 설명합니다.

녹색 스레드는 “사용자 수준 스레드”입니다. 그것들은 커널이 아닌 “일반적인”사용자 레벨 프로세스에 의해 예약됩니다. 따라서 이러한 기능을 제공하지 않는 플랫폼에서 멀티 스레딩을 시뮬레이션하는 데 사용할 수 있습니다.

특히 Java의 맥락에서 녹색 스레드는 과거의 일입니다. Solaris Developer ‘s Guide 용 JDK 1.1 문서를 참조하십시오 . (솔라리스에 관한 것이지만 녹색 스레드가 더 이상 사용되지 않는다는 사실은 일반 플랫폼에서 유효합니다.)

녹색 스레드는 버전 1.3 릴리스부터 Linux 용 Sun JVM에서 폐기되었습니다 ( archive.org 에서 Linux 플랫폼의 Java [tm] 기술 참조 ). 2000 년으로 거슬러 올라갑니다. Solaris의 경우 JDK 1.2에서 원시 스레드를 사용할 수있었습니다. 그것은 1998 년으로 거슬러 올라갑니다. Windows에 대한 녹색 스레드 구현이 없다고 생각하지만 그에 대한 참조를 찾을 수 없습니다.

Wikipedia 기사에 언급 된 몇 가지 예외가 있습니다. 주로 저전력 (임베디드) 장치를 위해 수집합니다.


답변

녹색 스레드는 OS가 아닌 응용 프로그램 수준에서 구현 된 스레드입니다. 이것은 일반적으로 OS가 스레드 API를 제공하지 않거나 필요한 방식으로 작동하지 않을 때 수행됩니다.

따라서 장점은 스레드와 같은 기능을 전혀 얻을 수 없다는 것입니다. 단점은 녹색 스레드가 실제로 여러 코어를 사용할 수 없다는 것입니다.

녹색 스레드를 사용하는 초기 JVM이 몇 개 있었지만 (IIRC는 Linux에 대한 Blackdown JVM 포트가 사용했습니다) 요즘에는 모든 주류 JVM이 실제 스레드를 사용합니다. 여전히 녹색 스레드를 사용하는 임베디드 JVM이있을 수 있습니다.


답변

녹색 스레드 메모리는 OS에서 스택을 생성하는 대신 힙에서 할당됩니다. 이로 인해 동시 스레드가 수십 배 이상 증가 할 수 있습니다. 다른 사람들이 언급했듯이 이것은 다중 프로세서를 자동으로 활용하지 않지만 사용 사례는 일반적으로 I / O를 차단하는 것입니다. 예를 들어 녹색 스레드를 사용하면 10k가 아닌 100k 동시 연결을 처리 할 수 ​​있습니다.

즉, 녹색 스레드는 특정 규모의 IO 바인딩 작업에 더 좋습니다.


답변

녹색 스레드는 프로세서보다 활성 스레드가 많을 때 기본 스레드보다 훨씬 빠릅니다.

Java는 처음에 녹색 스레드를 지원했지만 대부분의 최신 녹색 스레드 구현과 달리 다중 프로세서로 확장 할 수 없으므로 Java는 다중 코어를 사용할 수 없습니다.

그런 다음 Java는 원시 스레드에만 의존하기 위해 녹색 스레딩을 제거했습니다. 이로 인해 Java 스레드가 녹색 스레드보다 느려졌습니다.

다른 녹색 스레드와는 달리 멀티 코어 또는 멀티 프로세서 시스템에서 확장 할 수 없기 때문에 단점이있는 녹색 스레드의 Java 구현에 대해 구체적으로 이야기하고 있지 않습니다.


답변

녹색 스레드는 커널 수준 스레드가 아니라 사용자 수준 스레드입니다. 커널이 아닌 사용자 라이브러리에 의해 예약됩니다. OS 스케줄러에 의존하지 않고 스레드를 스케줄링하는 자체 스케줄링 메커니즘을 가질 수 있습니다.

녹색 스레드는 기본 OS 기능에 의존하지 않고 다중 스레드 환경을 에뮬레이션하고 커널 공간 대신 ​​사용자 공간에서 관리되므로 기본 스레드 지원이없는 환경에서 작업 할 수 있습니다.

Performace :

멀티 코어 프로세서에서 네이티브 스레드 구현은 작업을 여러 프로세서에 자동으로 할당 할 수 있지만 녹색 스레드 구현은 일반적으로 할 수 없습니다. 녹색 스레드는 스레드 활성화 및 동기화에서 Linux 기본 스레드보다 성능이 훨씬 뛰어납니다.

녹색 스레드가 차단 시스템 호출을 실행하면 해당 스레드가 차단 될뿐만 아니라 프로세스 내의 모든 스레드가 차단됩니다.


답변

녹색 스레드는 OS에 의해 예약되지 않습니다.

즉, 이들에 대한 스케줄링은 사용자 공간에서 발생하며 커널에 의해 처리되지 않습니다. 이것은 일반적으로 모든 CPU 코어를 사용하도록 녹색 스레드를 만들 수 없음을 의미합니다.

요즘 Java를 실행하는 모든 주류 플랫폼 (예 : x86 또는 x64)의 경우 실제 스레드를 사용하게됩니다.


답변

JAVA Multi-Threading은 두 가지 모델로 구현됩니다.

  1. 녹색 스레드 모델
  2. 기본 OS 모델

Green Thread 모델 : 기본 OS 지원없이 JVM에서 관리하는 Thread를 Green Thread라고합니다. Sun Solaris와 같은 소수의 OS는 녹색 스레드 모델을 지원합니다. 더 이상 사용되지 않으며 사용하지 않는 것이 좋습니다.

기본 OS 모델 : 기본 OS의 도움을 받아 JVM이 관리하는 스레드를 기본 OS 모델이라고합니다. 모든 Windows OS는 기본 OS 모델을 지원합니다.