>백엔드 개발 >Golang >채널을 사용하여 고루틴을 더 빠르게 닫습니다.

채널을 사용하여 고루틴을 더 빠르게 닫습니다.

WBOY
WBOY앞으로
2024-02-06 09:12:04790검색

使用通道更快地关闭 goroutine

질문 내용

GO를 처음 접하는데 채널 신호를 사용하여 고루틴을 중지하는 방법에 대해 질문이 있습니다.

저는 오랫동안 실행되는 고루틴(1000개 이상)과 이를 관리할 관리자가 있습니다:

으아악

이런 경우에는 전화할 때마다 c <- true 管理器都会等待 callClientTask() 完成,然后转到下一个 cancelChannel 나는 모든 고루틴이 callClientTask()(30초 이하)

의 1회 반복으로 중지되기를 원합니다.

내가 시도한 유일한 방법은 다음과 같이 새로운 고루틴을 캐스팅하는 것이었습니다:

으아악

내가 이 일을 제대로 하고 있는 걸까요?


정답


귀하의 질문에서 제가 이해한 한, "callClientTask()의 1회 반복(30초 이하) 내에 모든 고루틴을 중지하고 동기화 질문 없이 작업자 스레드를 동시에 실행하기를 원합니다."

대기그룹과 동시에 실행되도록 코드를 재구성했습니다.

샘플 코드:

으아악

출력:

으아악

편집자:

일부 작업자를 중지하려면 작업자를 업데이트해야 합니다. 다음 코드에는 "중지" 및 "중지" 채널과 시작/중지 기능이 있는 작업자가 포함되어 있습니다.

샘플 코드:

으아악

출력:

으아악

위 내용은 채널을 사용하여 고루틴을 더 빠르게 닫습니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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