>일반적인 문제 >golang은 다중 프로세스인가요?

golang은 다중 프로세스인가요?

百草
百草원래의
2023-07-07 10:18:151576검색

golang은 멀티 프로세스이고 그 스레드 모델은 MPG 모델입니다. 일반적으로 Go 프로세스와 커널 스레드는 다대다 대응을 가지므로 우선 멀티 스레드여야 합니다. Golang에는 소위 M 비율 N 모델이 있습니다. N go 루틴은 M 스레드에서 생성될 수 있습니다. 일반적으로 N은 M보다 훨씬 큽니다. 그러나 코루틴의 스케줄링은 Go에 의해 결정됩니다. 개발자는 코루틴 간 동기화를 위해 채널을 사용해야 한다는 점을 강조합니다.

golang은 다중 프로세스인가요?

이 기사의 운영 환경: Windows 10 시스템, go1.20 버전, DELL G3 컴퓨터.

golang은 단일 프로세스가 아니라 다중 스레드입니다.

Golang에는 소위 M 비율 N 모델이 있습니다. N go 루틴은 M 스레드에서 생성될 수 있습니다. 일반적으로 N은 M보다 훨씬 큽니다. 본질적으로 다중 스레드 모델이지만 코루틴의 스케줄링은 다음에 의해 결정됩니다. 개발을 강조하는 Go의 런타임. 독자는 코루틴 간의 동기화를 위해 채널을 사용해야 합니다.

스레드의 경우 언어 수준이 개방적이지 않기 때문에 다중 코루틴 모델로 이해하면 됩니다. 일반적으로 스레드 수는 CPU 코어 수와 동일합니다. 물론 실제로는 여전히 런타임에 의해 결정됩니다.

고루틴의 스케줄링은 실제로 지속적으로 발전하고 있습니다. GMP 모델에 대해서만 이야기하겠습니다. 고루틴은 작업이 실행될 때마다 현재 P(프로세서)에서 실행 가능한 대기열을 확인합니다. 큐에 실행 가능한 고루틴이 있습니다. 현재 P에 실행 가능한 고루틴이 없으면 다른 P의 실행 가능한 큐에 있는 고루틴을 훔칩니다.

이론적으로 고루틴 생성은 메모리에 의해서만 제한됩니다. 일반적으로 최대값은 2MB 공간의 스레드의 경우 이론적으로 쉽게 1,000에 도달할 수 있으므로 이는 이상적인 상황에 불과합니다. 생성된 고루틴 수가 증가하더라도 OS 스레드 수는 증가하지 않습니다. 스레드 스케줄링은 Go의 경우 상대적으로 성능 집약적입니다. 빈번한 일정 전환은 고루틴 간에만 존재하며 스레드는 CPU 수와 동일한 수의 활성 스레드만 유지합니다.

프로세스 및 스레드에 대하여

1. 프로세스

프로세스는 운영체제에서 프로그램을 실행하는 프로세스로, 시스템의 자원 할당과 스케줄링을 위한 기본 단위입니다. 프로그램 실행 프로세스에서 자원 할당 및 관리의 기본 단위입니다. 각 프로세스에는 자체 주소 공간이 있습니다. 프로세스에는 초기 상태, 실행 상태, 대기 상태, 준비 상태, 종료 상태 등 최소한 5가지 기본 상태가 있습니다.

일반인의 관점에서 보면 프로세스는 실행 프로그램입니다.

2. 쓰레드

쓰레드는 프로세스의 실행 인스턴스이자 프로그램 실행의 가장 작은 단위로, 프로세스보다 작고 독립적으로 실행될 수 있는 기본 단위입니다.

일반인의 관점에서 보면 프로세스는 여러 스레드를 생성할 수 있으며 동일한 프로세스의 여러 스레드를 동시에 실행할 수 있습니다. 프로그램을 실행하려면 프로세스가 하나 이상 있어야 합니다.

golang은 다중 프로세스인가요?

golang은 다중 프로세스인가요?

위 내용은 golang은 다중 프로세스인가요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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