Golang Goroutine, Channel, I/O 그리고 Scheduler 이해해보기
Go언어를 요즘에 진지하게 생각하고 계속해서 자료를 찾아보며 익히고 있다.
가장 흥미있는 부분은 Goroutine scheduler 구현과 I/O시스템을 어떻게 만들었을까인데, 아직은 소스코드를 뜯어 읽고 하지는 못하지만, 그냥 내가 만들었다면 아마 이렇지 않을까 하는 정도의 추측을 갖고 반대로 예제들을 만들어보며 확인해보고 있다.1
우선 현재의 추측은 다음과 같다.
GOMAXPROCS
같은걸 이용해서 실행시간에는 필요한만큼만 최소한으로만 OS Thread을 시작하는듯. 2- 너무 많은 스레드가 있어도 어차피 Context switching 비용만 늘어나고 별 의미는 커녕 더 나쁠 수 있으니까.
- Goroutine들은 Go runtime의 Scheduler이 서로 실행기회를 나눠준다.
- 실행기회를 다른 goroutine에 yield하는 방법은,
- I/O operation을 실행하거나
- Channel에 Receive/Send할때
- 위 (2.2)에서 I/O operation이 Async I/O으로 구현되었을거라고 생각.
- 왜냐하면, 그래야 blocking 안되고, Go scheduler으로 실행이 넘어가고,
- Go scheduler은 I/O event loop을 통해서 적절하게 다음에 실행할 Goroutine을 결정할 수 있을테니까.
예제 프로그램 코드
|
|
실행결과, 결론, 생각
예상한대로,
…ASDF으로 간단한 의존성 연결과 로딩하기
System? 이런게 왜 필요하지? require
있잖아
대부분의 유명한 프로그래밍언어들이 커먼리습의 System 에 대응하는 기능이 명확하게 없으니까, 다른 프로그래밍 하거나 하는 방법으로 이야기를 하지는 않아야겠다.1
https://lispcookbook.github.io/cl-cookbook/systems.html 에서 마음에 드는 설명을 찾을수 있다.
A system is a collection of Lisp files that together constitute an application or a library, and that should therefore be managed as a whole. A system definition describes which source files make up the system, what the dependencies among them are, and the order they should be compiled and loaded in.
…
Ping 03/11/2018
작위를 수여받았다
받아본 생일선물 중에 가장 귀여운거였다.
tweet 1058052532839231488
씨디리핑, 음악듣기
지난달부터 갖고 있던 씨디, 듣고 싶던 앨범들 다시 모으면서 리핑한 씨디들.
조금 더 모으고 싶은 아티스트나 앨범들이 있는데 구하기 어려울거 같아서 걱정.
tweet 1058666194616541184
주말에 남는 시간에 씨디 리핑하고 음악 들으며 여유부리기.
…