[TIL] 20201222

todo

What I learned

  • Visual Code 에서 git history 를 보려면 “Git History” extension 을 설치.

  • leetcode 148 문제를 풀면서 정렬 방법들의 자세한 동작들이 궁금해져서 찾아보았다. 이전에 Arrays.sort() 에 대해 공부하며, primitive type에는 퀵소트(DualPivotQuicksort)를 사용하지만, object에는 ComparableTimSort를 사용한다는 것을 알게 되었다. ComparableTimSort가 삽입과 머지정렬을 함께 사용한다는 정도만 알고 넘어갔었는데, 오늘 Tim sort에 대해 알아보자 포스팅을 보면서 Tim Sort를 포함한 정렬에 대해 더 깊이 배울 수 있었다.

  • 시간 복잡도 O(nlogn)의 실제 동작 시간은 C * nlogn + a 으로 구할 수 있다.

    • 상수 C를 결정하는데 큰 영향을 주는 요소가 참조 지역성(Locality of Reference)
      • 최근에 참조한 메모리 (or 인접 메모리)를 다시 참조할 확률이 높다 이론을 기반으로 메모리에 비해 속도가 빠른 캐시 메모리에 담아두는 것이다. 따라서, 속도 면에서, 메모리를 연속적으로 읽는 작업이 랜덤하게 메모리를 읽는 작업보다 빠르다.

  • Coroutine

    • 특징 2가지: replace callback, main-safety

    • suspend 키워드: 코루틴에서 사용하는 함수

      • 키워드 자체가 스레드를 지정하지 않음. 즉, 메인스레드 or 백그라운드에서 실행 가능
    • suspend fun: 일반함수 (함수가 return될때까지 blocking) 와 달리, 결과가 준비될 때까지 실행을 일시중지(suspend)하며 결과와 함께 중단된 지점부터 재시작(resume) 하며 suspend 중일 때 스레드를 bloking 하지 않는다. 즉, 다른 함수나 코루틴 실행이 가능.

    callback을 없앤 coroutine 방식

    • callback과 똑같은 일을 할 수 있지만, 순차적으로 작성(sequential-style)되며 적은 코드량으로 가독성이 좋다.
      • 오래 실행되는 작업의 결과를 기다렸다가 실행됨
        • ex) 네트워크 결과를 가져와서 DB에 저장!

Tags:

Categories:

Updated:

Leave a comment