>  기사  >  백엔드 개발  >  Golang - 동시성, 병렬성, 시퀀스

Golang - 동시성, 병렬성, 시퀀스

王林
王林앞으로
2024-02-09 22:00:101028검색

Golang - 并发、并行、顺序

php 편집기 Xigua는 Golang의 동시성, 병렬성 및 순서의 세 가지 중요한 개념을 소개합니다. 동시 프로그래밍에서 Golang은 동시 작업을 구현하기 위한 풍부한 도구와 구문을 제공하여 프로그램이 동시에 여러 작업을 처리할 수 있도록 합니다. 병렬 프로그래밍은 멀티 코어 프로세서를 사용하여 여러 작업을 동시에 실행하고 프로그램 실행 효율성을 높이는 것입니다. 순차적 프로그래밍은 코드 순서대로 실행되므로 작업이 특정 순서로 실행되도록 해야 하는 시나리오에 적합합니다. 이 세 가지 개념을 유연하게 사용함으로써 개발자는 높은 동시성 시나리오에서 Golang의 장점을 최대한 활용하고 프로그램 성능과 효율성을 향상시킬 수 있습니다.

질문 내용

저는 지금 Go를 배우고 있는데 동시성, 병렬성, 순차성 간의 차이가 정말 답답해요.

5개의 URL 조각을 가로채서 내용을 텍스트 파일에 붙여넣는 프로세스가 있다고 가정해 보겠습니다. 이 프로세스는 URL당 2초가 소요됩니다.

  • 순차적으로 -> 하나씩 실행되기 때문에 10초가 걸립니다
  • 병렬 -> 이러한 작업을 동시에 수행하지만 여러 스레드나 프로세서를 사용하므로 10초도 채 걸리지 않습니다.
  • 동시성 -> 10초 미만이 소요되지만 여러 스레드나 프로세서가 필요하지 않습니다.

이 시점까지 나는 내 말이 맞는지 확신할 수 없었습니다. 내 질문은:

병렬성은 동시에 일을 하는 것이고(예: 달리기, 음악 듣기) 동시성은 동시에 일을 하는 것입니다(예: 셔츠를 다림질하면서 아침 식사를 마무리하는 것).

하지만 그렇다면 동시성을 완료하는 데 10초가 걸리지 않는 이유는 무엇입니까? 결국에는 모든 작업을 동시에 수행하는 것이 아니라 모든 작업이 완료될 때까지 모든 작업의 ​​하위 집합만 수행하기 때문입니다.

Solution

여기에 비유해서 설명하겠습니다.

계란 5개를 써니사이드가 위로 향하게 튀겨야 합니다. 계란을 요리하려면 프라이팬에 계란을 깨뜨린 후 몇 분 정도 기다린 후 꺼내세요.

  • 순차 방법은 첫 번째 계란을 먼저 볶은 다음 두 번째 계란을 튀기는 식으로 계란 5개를 튀기는 것입니다.

  • 병행 방법은 요리사 5명을 고용하여 각자 달걀 프라이를 하게 한 다음 모두 끝날 때까지 기다리는 것입니다.

  • 병렬 방법은 실제 레시피를 따르는 것계란 5개를 모두 직접 익히는 것입니다. 즉, 각 계란을 팬에 빠르게 깨뜨린 다음 준비가 되면 각 계란을 제거합니다.

5명의 셰프를 고용하지 않음으로써 시간을 절약하는 이유는 셰프의 수에 따라 속도가 제한되지 않기 때문입니다. 계란을 데치는 데는 몇 분이 걸리지만 시작과 끝에서 몇 초 동안만 주의와 손이 필요합니다.

Go 런타임은 최신 운영 체제 런타임만큼 스마트합니다. 그들은 스레드가 네트워크 응답을 받기를 기다리는 동안 프로세서가 주의를 끌 만한 다른 것을 찾을 수 있다는 것을 알고 있습니다.

동시성의 큰 그림은 주로 프로세서 수가 아니라 전반적인 리소스 경합에 관한 것입니다. 작업을 실행하려면 리소스가 필요하며 사용 가능한 것보다 더 많은 리소스를 사용할 수 없습니다. 프로세서는 리소스이지만 메모리 저장소, 메모리 대역폭, 네트워크 대역폭, 파일 핸들 등도 있습니다.

위 내용은 Golang - 동시성, 병렬성, 시퀀스의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 stackoverflow.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제