본문 바로가기

전체 글42

ultimate go (1)- syntax 문법 변수 변수는 2가지 명확한 표현이 있다. 메모리크기, 변수의 종류(int64, 64bit의 크기를 가진 숫자...) 메모리크기가 명확하지않은 표시(int)는 아키텍쳐에 의해서 변화하는데(64bit os-> int = int64) 초기화 0bit로 초기화 된다. false, nil, "", 0, 0i 문자열은 unit8의 2번사용 첫번째unit8은 배열을 가르키는 포인터, 두번째unit8은 문자열의 길이 type casting을 지원하지않고 type conversion을 지원한다. 구조체 example struct { flag bool counter int16 pi float32 } 다른 타입들을 필드로 갖을 수 있다. 초기화는 0값으로 된다. 메모리 할당 bool 1byte, int16 2byte,.. 2023. 1. 18.
concurrency in go(4) 5장. 확장에서의 동시성 더 큰 사이즈의 확장된 시스템에서의 동시성을 잘 활용하기 위해서는 다음과 같은 부분을 신경쓸필요가 있다. 에러전파 시간 초과 및 취소 하트비트 복제된 요청 속도 제한 비정상 고루틴의 치료 1.에러전파 분산시스템은 문제가 발생하기 쉽고, 문제의 원인을 쉽게 파악하기 어렵다. 그렇기 때문에 동시성 프로그램에서의 에러전파는 중요한 문제이다. go의 특성상 사용자가 호출 스택의 모든 프레임에서 에러를 처리하도록 강제하고있다. 에러에 들어가야될 정보 발생한 사건: 에러의 유형 정보 발생한 장소 및 시점: 에러의 발생 장소 및 시간 사용자 친화적인 메세지: 위의 2가지정보를 간략하면서도 유의미하게 표현 사용자가 추가적인 정보를 얻을 수 있는 방법: 로그에 상호 참조될수 있는 id등을 제공 .. 2023. 1. 6.
concurrency in go(3) 4장- go의 동시성 패턴 제한 동시성 프로그래밍시 안전한 작동을 만드는 옵션 메모리 공유를 통한 동기화 기본요소(mutex) 통신을 통한 동기화(channel) 변경불가능 데이터(const) 제한(confinement)에 의해 보호되는 데이터 제한의 2가지 방식 ad hoc: 코드베이스에서 설정된 관례에 의해 제한이 이루어지는 경우 lexical: 컴파일러가 제한하도록 만드는것 critical area가 없어지므로, 동기화 비용과 같은 cost를 줄일 수 있다. for-select 루프 for { select{ case 2023. 1. 4.
concurrency in go(2) 3장 go 동시성 구성 요소 고루틴 가장 기본적인 단위(main도 하나의 고루틴이다) 고루틴은 os스레드가 아니고, 그린스레드도 아니고, coroutine이라고 불리는 더 높은 추상화이다. hw 스레드: 물리 cpu를 가상화하여서 2개의 코어로 만드는것. hyper-threading기능이라고 생각하면 됨 os 스레드(native 스레드): 일반적으로 우리가 생각하는 core의 메모리를 공유하는 프로세스, cpu스케쥴링의 단위 그린 스레드: 유저스레드 to os스레드가 many to one으로 연결되는 형태 코루틴: 동시에 실행되는 서브루틴으로 비선점적인 루틴을 의미한다. 고루틴은 go 런타임과 긴밀하게 통합되어 있어서, 잘 효율적으로 실행됨 m:n 스케줄러를 구현한것으로 m개의 그린 슬레드를 n개의 os.. 2023. 1. 3.