>  기사  >  백엔드 개발  >  golang에는 프로세스가 있나요?

golang에는 프로세스가 있나요?

青灯夜游
青灯夜游원래의
2022-12-26 17:38:274880검색

golang에는 프로세스가 있습니다. 프로세스는 운영체제에서 프로그램을 실행하는 과정으로, 시스템이 자원을 할당하고 스케줄링하는 기본 단위이다. 프로세스는 동적 개념으로, 프로그램 실행 중에 자원을 할당하고 관리하는 기본 단위이다. 프로그램마다 고유한 주소 공간이 있습니다. Go 언어는 여러 프로세스를 지원하며 해당 스레드 모델은 일반적으로 Go 프로세스와 커널 스레드 간에 다대다 대응이 있습니다.

golang에는 프로세스가 있나요?

이 튜토리얼의 운영 환경: Windows 7 시스템, GO 버전 1.18, Dell G3 컴퓨터.

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

1. 프로세스

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

일반인의 용어로 말하면: 프로세스는 실행 프로그램입니다.

2. 쓰레드

쓰레드는 프로세스의 실행 인스턴스이며, 프로그램 실행의 최소 단위이며, 독립적으로 실행될 수 있는 기본 단위입니다.

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

golang에는 프로세스가 있나요?

golang에는 프로세스가 있나요?

2. 동시성 및 병렬성에 대하여

1. 동시성

여러 스레드가 동시에 위치를 놓고 경쟁하며, 경쟁하는 스레드만 실행될 수 있습니다. 각 기간마다 실행 중입니다.

golang에는 프로세스가 있나요?

2. 병렬

여러 스레드를 동시에 실행할 수 있습니다. 각 기간마다 여러 스레드를 동시에 실행할 수 있습니다.

golang에는 프로세스가 있나요?

3. 일반인의 용어로

멀티 스레드 프로그램은 단일 코어 CPU에서 실행될 때 동시성이라고 하고, 멀티 코어 CPU에서 실행될 때 병렬이라고 합니다. 스레드 수가 CPU 코어 수보다 크면 다중 스레드 프로그램은 여러 CPU에서 동시 및 병렬이 됩니다.

3. 고루틴 코루틴 및 메인 스레드

1. 메인 스레드

는 Golang 프로그램의 메인 스레드에서 여러 코루틴을 활성화할 수 있습니다. golang의 여러 코루틴은 동시성 또는 병렬성을 달성할 수 있습니다.

2. 코루틴

은 커널에 투명한 사용자 수준 스레드로 이해될 수 있습니다. 즉, 시스템은 코루틴의 존재를 모르고 사용자 자체 프로그램에 의해 완전히 예약됩니다. golang의 주요 기능은 언어 관점에서 기본적으로 코루틴을 지원한다는 것입니다. 함수나 메서드 앞에 go 키워드를 추가하여 코루틴을 만들 수 있습니다. golang의 코루틴은 고루틴이라고 할 수 있습니다.

golang에는 프로세스가 있나요?

Golang의 멀티 코루틴은 다른 언어의 멀티 스레딩과 다소 유사합니다.

3. 다중 코루틴 및 다중 스레드

Golang의 각 고루틴(코루틴)은 기본적으로 Java 및 C 스레드보다 훨씬 적은 메모리를 차지합니다. OS 스레드(운영 체제 스레드)는 일반적으로 고정된 스택 메모리(보통 약 2MB)를 갖습니다. 고루틴(코루틴)은 매우 작은 메모리를 차지하며, 다중 고루틴 고루틴 전환의 스케줄링 오버헤드는 스레드보다 훨씬 적습니다. 이것이 점점 더 많은 대기업들이 Golang을 사용하는 이유 중 하나입니다.

4. go 키워드의 실제 동작

1. 순차적 실행

package main

import "fmt"

func test() {
	for i := 0; i <h3 id="2.%20%E5%8A%A0%E5%85%A5go"><strong>2. 시간 추가</strong></h3><pre class="brush:php;toolbar:false">package main

import "fmt"

func test() {
	for i := 0; i <h3 id="3.%20%E5%8A%A0%E5%85%A5%E6%97%B6%E9%97%B4"><strong>4. </strong></h3> <pre class="brush:php;toolbar:false">package main

import (
    "fmt"
    "time"
)

// 加入时间
func test1() {
	for i := 0; i <h3 id="4.%20%E4%B8%BB%E7%BA%BF%E7%A8%8B%E6%89%A7%E8%A1%8C%E5%BF%AB%E7%9A%84%E6%83%85%E5%86%B5"><strong>5. sync.WaitGroup은 기다리지 않는 문제를 해결합니다</strong></h3><pre class="brush:php;toolbar:false">package main

import (
    "fmt"
    "time"
)

func test1() {
	for i := 0; i <h3 id="5.%20sync.WaitGroup%E8%A7%A3%E5%86%B3%E4%B8%8D%E7%AD%89%E5%BE%85"><strong>6. 여러 코루틴을 동시에 실행합니다.</strong></h3><pre class="brush:php;toolbar:false">package main

import (
    "fmt"
    "time"
    "sync"
)

var wg sync.WiatGroup

func test2() {
	for i := 0; i <h3 id="6.%20%E5%A4%9A%E5%8D%8F%E7%A8%8B%E5%B9%B6%E5%8F%91%E5%B9%B6%E8%A1%8C%E6%89%A7%E8%A1%8C"><strong>5. 실행 시 golang이 차지하는 CPU 코어 수를 설정합니다. )</strong></h3><pre class="brush:php;toolbar:false">package main

import (
    "fmt"
    "time"
    "sync"
)

func hello(num int) {
	defer wg.Done()
	for i := 0; i <h2 id="%E4%BA%94%E3%80%81%E8%AE%BE%E7%BD%AEgolang%E8%BF%90%E8%A1%8C%E6%97%B6%E5%8D%A0%E7%94%A8%E7%9A%84cpu%E6%A0%B8%E6%95%B0%E9%87%8F%EF%BC%88%E4%B8%8D%E6%98%AF%E5%BE%88%E9%87%8D%E8%A6%81%EF%BC%89">더 보기 프로그래밍 관련 지식을 더 보려면 <strong>프로그래밍 비디오</strong>를 방문하세요! ! </h2>

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

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