@ 17. 1 ~ 18
-
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{"사과", "바나..
-
메모리 락과 락없는 프로그래밍@ 17. 1 ~ 18/C# 멀티스레드 2018. 7. 3. 00:02
임계영역같은 스타일의 동기화가 아닌 형태로 수행할 수 있는 스레드 간의 읽기, 쓰기를 락 없는 프로그래밍이라고 불린다.(특히 읽기와 쓰기에 대해 만들어지는 원자성과 순서 보장을 잘 알아야한다) 제대로 구현했다면 임계영역은 다른 스레드에서 동시적으로 실행하는 영역의 원자성과 직렬성을 보장한다.이런보장은 근본적인 정확성의 속성이다. 메모리 동작은 규칙적으로 프로그램을 실행할 책임이 있는 소프트웨어와 하드웨어에 의해 재배치 된다. 1. 컴파일러는 소스를 컴파일된 프로그램 명령어로 변환하는 과정에서 종종 최적화를 수행한다.(읽기와 쓰기가 옮겨지거나 제거 또는 더해진다) 2. 프로세서는 명령어 파이프라인을 통해서 다른위치인 a와 b인 메모리 읽기쌍을 동시에 실행한다.예를들어 문자 그대로 a가 원래 소스코드의 b에..
-
[MySQL] 실행계획 & select_type@ 17. 1 ~ 18/DB 2018. 7. 1. 21:11
Mysql에서는 EXPLAIN으로 실행계획을 확인할 수 있다.실행계획을 이해할 수 있어야만 실행 계획의 불합리한 부분을 찾아내고 더욱 최적화된 방법으로 실행 계획을 수립하도록 유도할 수 있다. Mysql서버에서 쿼리가 실행되는 과정은 크게 3가지로 본다1. 사용자로부터 요청된 SQL문장을 잘게 쪼개서 Mysql서버가 이해할 수 있는 수준으로 분리첫번째 단계를 SQL파싱이라고 하며 Mysql서버의 SQL파서라는 모듈로 처리한다.SQL문장이 문법적으로 잘못됐다면 이단계에서 걸러진다.SQL파스트리가 만들어진다. 2. SOL의 파싱 정보(파스트리)를 확인하면서 어떤 테이블로부터 읽고 어떤 인덱스를 이용해 테이블을 읽을지 선택대표적으로 아래 4가지를 수행한다.불필요한 조건의 제거 및 복잡한 연산의 단순화여러 테이..
-
스레드 풀 스레드 관리@ 17. 1 ~ 18/C# 멀티스레드 2018. 6. 30. 16:15
CLR 스레드 풀이 스레드 풀에서 스레드를 언제 생성하고 파괴하는지 어떻게 결정하고어떻게 개발자가 이런 프로세스에 영향을 미칠 수 있는지 보자 * 스레드 인젝션과 은퇴 알고리즘 세부사항윈도우 스레드 풀과 동일하게 CLR 풀은 일부 정교한 휴리스틱을 사용해 스레드의 관리를 추상화한다.그러나 채용된 구체적인 휴리스틱은 다르다. 대부분의 사람들은 구체적인 알고리즘을 몰라도 된다.하지만 내부 세부구현 내용을 이해하는것이 프로그램의 성능과 확장성을 이해하는데 도움이 된다.실질적으로 CLR 스레드 풀은 두가지 세트의 스레드를 관리한다하나는 일반적인 작업 아이템을 처리하고(QueueUserWorkItem, 콜백 등..) 다른하나는 모든 I/O완성을 다룬다.특성이 달라도 두 가지의 스레드 관리는 거의 동일하다. 주요 ..
-
[MySQL] 조인 관련 주의사항 (3)@ 17. 1 ~ 18/DB 2018. 6. 28. 23:08
MySQL 조인 처리에서 특별히 주의해야할 부분은 1. 실행 결과의 정렬순서2. INNER JOIN과 OUTER JOIN의 선택2가지 정도이다. 조인 실행 결과의 정렬 순서일반적으로 조인으로 쿼리가 실행되는 경우, 드라이빙 테이블로부터 레코드를 읽는 순서가 전체 쿼리의 결과 순서에 그대로 적용되는 것이 일반적이는 네스티드-루프 조인 방식의 특징이기도 하다.SELECT de.dept_no, e.emp_no, e.first_nameFROM dept_emp de, employees eWHERE e.emp_no=de.emp_noAND de.dept_no='d005';실행 계획은 아래와 같다 id select_type table type key key_len ref rows Extra 1 SIMPLE de ref..