>  기사  >  Java  >  자바 동일 스레드

자바 동일 스레드

黄舟
黄舟원래의
2017-02-28 10:22:401415검색

동일 스레드는 동시성 모델입니다. 이 동시성 모델의 의미는 단일 스레드 시스템이 N개의 단일 스레드 시스템으로 확장된다는 것입니다. 그 결과 N개의 단일 스레드 시스템이 병렬로 실행됩니다.

동일 스레드 시스템은 여러 스레드를 포함하므로 순수한 단일 스레드 시스템이 아닙니다. 그러나 이러한 각 스레드는 단일 스레드 시스템처럼 실행됩니다.

왜 단일 스레드 시스템인가요?

오늘은 왜 모든 시스템이 단일 스레드로 설계되었는지 궁금하실 것입니다. 단일 스레드 시스템은 동시성 모델이 멀티스레딩보다 단순하기 때문에 인기를 얻었습니다. 단일 스레드 시스템은 다른 스레드와 데이터를 공유하지 않습니다. 이를 통해 스레드는 비동시 데이터 구조를 사용하고 CPU 및 CPU 캐시를 더 잘 활용할 수 있습니다.

안타깝게도 단일 스레드 시스템은 최신 CPU를 최대한 활용하지 못합니다. 최신 CPU에는 대개 2개, 4개 또는 그 이상의 코어가 있습니다. 각 코어는 별도의 CPU로 작동합니다. 단일 스레드 시스템은 아래와 같이 이러한 코어 중 하나만 사용합니다.


동일 스레드, 단일 스레드의 확장

모든 CPU 코어를 완전히 활용하려면 단일 스레드 시스템을 확장하여 전체 컴퓨터를 활용할 수 있습니다.

CPU당 하나의 스레드

동일한 스레딩 시스템은 일반적으로 컴퓨터에서 CPU당 하나의 스레드를 실행합니다. 이 컴퓨터에 4개의 CPU 또는 4개의 코어가 있는 CPU가 포함된 경우 다이어그램에 표시된 대로 표준적으로 동일한 스레드의 인스턴스 4개(단일 스레드 시스템 4개)를 실행합니다.


공유 상태 없음

동일한 스레드 시스템은 내부적으로 여러 스레드가 실행되므로 멀티 스레드 시스템과 유사해 보입니다. 하지만 여기에는 미묘한 차이가 있습니다.

동일 스레드와 멀티 스레드 시스템의 차이점은 동일 스레드 시스템에서는 공유되는 데이터가 없다는 점입니다. 스레드가 동시에 액세스하는 메모리는 없습니다. 동시 데이터 구조 등은 없습니다. 차이점은 아래 그림과 같습니다.


공유 상태의 감소로 인해 각 스레드는 마치 단일 스레드 시스템인 것처럼 동작합니다. 그러나 동일한 스레드 시스템에는 단일 스레드 이상이 포함될 수 있으므로 진정한 "단일 스레드 시스템"이 아닙니다. 더 나은 이름이 없기 때문에 이러한 시스템을 "단일 스레드 디자인의 다중 스레드 시스템"보다는 동일 스레드 시스템이라고 부르는 것이 더 정확하다고 생각합니다. 동일한 스레드는 말하기가 매우 간단하고 이해하기가 훨씬 더 쉽습니다.

동일 스레드는 주로 데이터가 동일한 스레드에서 실행되며 공유되는 데이터가 없음을 의미합니다.

부하 분산

분명히 이 워크로드를 위해 실행되는 단일 스레드 인스턴스 간에 동일한 스레드 시스템을 공유해야 합니다. 그렇지 않은 경우 하나의 인스턴스만 작업을 수행하고 시스템은 사실상 단일 스레드가 됩니다.

여러 인스턴스에 로드를 정확히 분배하는 방법은 시스템 설계에 따라 다릅니다. 그 중 일부는 아래 섹션에서 다루겠습니다.

단일 스레드 마이크로서비스

시스템에 여러 마이크로서비스가 포함된 경우 각 마이크로서비스는 단일 스레드 모드에서 실행될 수 있습니다. 여러 단일 스레드 마이크로서비스를 동일한 컴퓨터에 배포하는 경우 각 마이크로서비스는 별도의 CPU에서 별도의 스레드를 실행할 수 있습니다.

마이크로서비스는 어떤 데이터도 공유하지 않으므로 동일 스레드 시스템의 좋은 사용 사례입니다.

샤딩된 데이터를 사용하는 서비스

시스템에서 데이터 또는 최소한 데이터베이스를 공유할 필요가 없는 경우 샤딩이 가능할 수 있습니다. 이 데이터베이스의 일부입니다. 샤딩은 데이터가 여러 데이터베이스로 분할되는 것을 의미합니다. 관련 데이터가 동일한 데이터베이스에 위치하도록 데이터를 대표적으로 분리합니다. 예를 들어, 일부 "소유자" 엔터티에 속하는 모든 데이터는 동일한 데이터베이스에 삽입됩니다. 샤딩은 이 튜토리얼의 범위를 벗어나므로 해당 주제에 대한 몇 가지 튜토리얼을 확인해야 합니다.

스레드 통신

동일 스레드의 스레드가 통신해야 하는 경우 메시지 전달을 통해 이를 수행합니다. 스레드는 스레드 A에 메시지를 보내려고 하며 메시지(바이트 시퀀스)를 생성하여 이를 수행할 수 있습니다. 그런 다음 스레드 B는 전체 메시지(바이트 시퀀스)를 복사하여 읽을 수 있습니다. 스레드 B는 메시지를 복사하여 메시지를 수정할 때 스레드 A가 메시지를 수정할 수 없음을 확인합니다. 일단 복사되면 스레드 A로 변경할 수 없습니다.

이 프로세스의 개략도는 다음과 같습니다.


이 스레드 통신은 큐, 파이프, Unix 소켓 및 TCP로 대체될 수 있습니다. 소켓. 귀하의 시스템에 적합한 모든 것.

더 단순한 동시성 모델

자체 스레드에서 실행되는 모든 시스템은 단일 스레드인 경우 동일한 스레드 시스템을 사용할 수 있습니다. 이는 내부 동시성 모델이 공유 상태의 스레드보다 단순해진다는 것을 의미합니다. 동시 데이터 구조 및 모든 동시성 문제에 대해 걱정할 필요가 없습니다.

그림

다음은 단일 스레드, 다중 스레드, 동일 스레드 시스템의 그림입니다. 차이점에 대한 개요를 더 쉽게 확인할 수 있습니다.

첫 번째 다이어그램은 단일 스레드 시스템을 보여줍니다.


장 두 번째 이미지는 데이터를 공유하는 멀티 스레드 시스템:


세 번째 이미지는 동일한 스레드를 보여주며, 두 개의 스레드가 분리된 데이터 시스템으로 서로 정보를 전달하여 통신합니다.


위는 동일한 Java 스레드의 내용이며, 더 많은 관련 내용은 PHP 중국어 홈페이지(www.kr)를 참고하시기 바랍니다. .php.cn)!


성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.