전체 글
-
GO RWMutex vs Mutex@ 17. 1 ~ 18/Go 랭 2020. 7. 16. 00:15
var Password = secret{password: "myPassword"} type secret struct { RWM sync.RWMutex M sync.Mutex password string } func Change(c *secret, pass string) { c.RWM.Lock() fmt.Println("LChange") time.Sleep(10 * time.Second) c.password = pass c.RWM.Unlock() } func show(c *secret) string { c.RWM.RLock() fmt.Println("show") time.Sleep(3 * time.Second) defer c.RWM.RUnlock() return c.password } func showWi..
-
-
GO 가변인자@ 17. 1 ~ 18/Go 랭 2020. 7. 4. 23:17
Go언어는 값을 넘기기 때문에 그 값들을 슬라이스에 담아서 넘기면 되지 않을까요 func f(w io.Writer, nums []int){ } func main(){ ... f(w, []int{x,y,z}) } //아래 처럼 가변인자로 한다면 func WriteTo(w io.Writer, lines... string) (n int64, err error){ } //이와 같이 lines를 가변인자로 변경하여도 lines는 슬라이스가 됩니다 //호출할때 원래는 슬라이스를 넘겨주어야 했겠지만 이제는 나열하는 것만으로도 가능하다 //WriteTo(w, "hello", "world", "Go") //그럼 이미 슬라이스로 갖고 있는 자료라면? //그냥 슬라이스 하나를 넘기면 그 슬라이스 하나를 담고 있는 슬라이스로..
-
Go 슬라이스@ 17. 1 ~ 18/Go 랭 2020. 7. 4. 13:23
자료구조 배열과 슬라이스 슬라이스는 연속된 메모리 공간. 순차적으로 이용하는 자료구조 배열이 직접사용되는 경우도 있지만 주로 슬라이스를 이요하여 간접적으로 배열을 이용하는 경우가 많다 1. 배열 func Exampe_Array(){ fruits :=[3]string{"사과", "바나나", "토마토"} for _, fruit := range fruits{ fmt.Println("%s는 맛있다", fruit) } //output //사과는 맛있다 //바나나는 맛있다 //토마토는 맛있다 } range 키워드에서 첫번째 제어변수는 0,1,2... 인덱스 두번쨰 제어변수는 각각의 값들이 순서대로 받아진다 컴파일러가 배열의 수를 알아내어서 넣게 만들고 싶다면 fruits := [...]string{"사과", "바나..
-
스레드와 잠금장치@19.1 ~ /동시성 모델 2020. 7. 4. 11:04
스레드와 잠금장치를 이용하는 프로그래밍은 마치 포드 모델 T와 비슷하다 그차로 A라는 장소에서 B라는 장소까지 운전해서 갈 수는 있지만 원시적이고 어려운 운전이 될 것이며, 새로운 기술과 비교하면 안전성도 떨어지고 위험하기까지 하다 하지만 많은 문제점에도 스레드와 잠금장치는 많은 동시성 소프트웨어를 작성할 때 기본 선택이 되고 있다 스레드와 잠금장치는 실제 하드웨어가 동작하는 방식을 그대로 옮긴것과 크게 다르지 않다 이들은 너무 단순하여 대부분의 언어가 어떠한 형태로든 이런 기능을 제공하고 있다 상호배제란? 잠금장치를 사용하는 것은 특정한 데이터에 접근하는 스레드가 한 번에 하나만 존재하도록 강제한다 경쟁조건이나 데드락처럼 상호배제가 정상 동작하지 못하게 만드는 상태에 대해서도 알고 있을 것이다 하지만 ..
-
동시성 혹은 병렬성?@19.1 ~ /동시성 모델 2020. 7. 1. 21:20
동시성 혹은 병렬성? 내 아내는 교사다. 다른 교사들과 마찬가지로 그녀는 멀티태스킹에 능숙하다. 어느 한 시점에서 보면 그녀는 한 가지 일을 수행하지만 언제나 여러 일을 한꺼번에 다루어야 한다. 한 학생이 책을 읽는 것을 듣는 동시에 떠들썩한 교실을 진정시키거나 다른 학생의 질문에 답을 주는 식이다 이것은 동시성이지 병렬성이 아니다. 즉 내 아내는 한명 뿐이다 그녀는 돕는 조교가 같이 있다면(한사람이 책읽는걸 듣고 지도하는 동안 다른 사람이 질문에 답하는 식으로) 동시성과 병렬성이 모두 가능해진다 아내의 학급이 연하장 카드를 디자인해서 생산한다고 생각해보자 학생 한 명당 다섯 개씩 만들도록 할당하는 방법을 쓸 수 있을 것이다. 이렇게 하는 것은 (상위의 수준에서 바라보았을 때) 카드를 만드는 한가지 일만..
-
프록시 패턴@19.1 ~ /Nodejs 2020. 6. 19. 01:36
프록시는 각 작업을 대상(Subject)으로 전달하여 추가적인 전처리 또는 후처리로 동작을 향상시킵니다. 여러 상황에서 유용하다 데이터 유효성 검사 : 프록시가 입력을 대상(Subject)으로 전달하기 전에 유효성을 검사 보안 : 프록시는 클라이언트가 작업을 수행할 수 있는 권한이 있는지 확인하고 검사 결과가 긍정적인 경우에만 요청을 대상으로 전달 캐싱 : 프록시가 내부 캐시를 유지하여 데이터가 캐시에 아직 존재하지 않는 경우에만 대상에서 작업이 실행되도록 한다 지연 초기화 : 대상의 생성 비용이 비싸다면 프록시는 그것을 필요로 할 떄까지 연기할 수 있다 로깅 : 프록시는 메소드 호출과 상대 매개 변수를 인터셉트하고 이를 기록한다 원격 객체 : 프록시는 원격 위치에 있는 객체를 가져와서 로컬처럼 보이게 ..
-
노드 Promise 패턴@19.1 ~ /Nodejs 2020. 6. 11. 00:04
1 순차패턴, 순차적으로 반복하는 패턴 let tasks = [ ... ] let promise = Promise.resolve(); tasks.forEach(task => { promise = promise.then(()=>{ return task(); }); }); promise.then(()=>{ //모든 작업들이 완료 }); //foreach 대신에 reduce()함수 사용 let tasks = [ ... ] let promise = tasks.reduce((prev, task) => { return prev.then(()=>{ return task(); }); }, Promise.resolve()); promise.then(()=>{ //모든 작업들이 완료 }); 이 패턴을 간단히 적용하면 모든..