본문 바로가기
[coroutine] Back-pressure 대응하기 - Back pressure 는 한국어로 "배압" 이라고 하며, Flow 의 세계에서는 emit 되는 속도보다 collect 되는 속도가 느린 현상을 이야기한다. (돼왕: input 이 쌓여 buffer 가 필요한 상황) 이에 대한 해결방법은 여러가지가 있겠다. - 아래와 같은 기본 로직이 있다고 하자. 이 로직은 emit 은 1초 단위로 되는데, collect 는 3초 이상을 소비한다. 즉 back pressure 가 발생하는 것이다. var start = 0L fun currTime() = System.currentTimeMillis() fun emitter(): Flow = (1..5) .asFlow() .onStart{ start = currTime() } .onEach{ delay(1000) p.. 2022. 2. 2.
[coroutine] Asyncronous Flow Representing multiple values -복수개의 값은 kotlin 에서 collection 을 사용하여 표현할 수 있다.fun foo() : List = listOf(1,2,3) fun main() { foo.forEach { value -> println(value) } } // 1 // 2 // 3 * Sequences -어떤 숫자를 계산하는데 CPU 를 blocking 하는 code 를 사용하고, 그 과정에 각각 100ms 가 걸린다면 우리는 이 숫자들을 Sequence 로 표현할 수 있다.fun foo() : Sequence = sequence{ // this 는 SequenceScope 이다. Sequence 는 coroutine 이 아닌 kotlin 의 것! for ( i in .. 2020. 3. 11.
[RxJava] #7 디버깅과 예외 처리 7.1. 디버깅 7.1.1. doOnNext(), doOnComplete(), doOnError() 함수 - onNext, onError, onComplete 에 대해 doOnNext(), doOnComplete(), doOnError() 가 매핑된다. 7.1.2. doOnEach() 함수 - doOnEach 는 onNext, onComplete, onError 이벤트를 한번에 처리할 수 있어 편하다. noti.isOnNext(), noti.isOnComplete(), noti.isOnError() 를 통해 상태를 조회할 수 있다. onNext() 함수의 경우 getValue() 호출하면 발행한 값을 얻을 수 있고, onError() 함수의 경우 getError() 함수를 호출하면 Throwable 객체.. 2019. 6. 11.
[RxJava] #4 리액티브 연산자의 활용 4.1. 생성 연산자 -생성 연산자의 역할은 데이터 흐름을 만드는 것이다.간단하게 Observable, Single, Maybe 객체 등을 만든다고 생각하면 된다. 4.1.1. interval() 함수 -일정 시간 간격으로 데이터 흐름을 생성한다.주어진 시간 간격으로 0부터 1씩 증가하는 Long 객체를 반환한다. -interval() 함수는 기본적으로 영원히 지속 실행되기 때문에 폴링 용도로 많이 사용된다.수행은 RxComputationalThreadPool 에서 수행된다.interval 값이 초기 지연값으로도 활용된다. 4.1.2. timer() 함수 -interval 함수와 유사하지만 한 번만 실행하는 함수.일정 시간이 지난 후에 한 개의 데이터를 발행하고 onComplete() 이벤트가 발생한다... 2019. 6. 5.
[android] RxAndroid 맛보기 [android] RxAndroid 맛보기 http://www.vogella.com/tutorials/RxJava/article.htmlhttps://code.tutsplus.com/tutorials/getting-started-with-reactivex-on-android--cms-24387https://realm.io/kr/news/rxandroid/ -Observable.just() 는 Observable 을 생성한다.이렇게 생성된 Observable 에 subscribe 가 붙으면 곧바로 just() 에 전달된 녀석이 onNext() 로 전달된다.List list = Arrays.asList(“Android”, “Ubuntu”, “Mac OS”);Observable listObservable = .. 2018. 3. 10.
[Java] nio vs io ( package level 에서의 개념, not 성능 ) [Java] nio vs io ( package level 에서의 개념, not 성능 ) http://tutorials.jenkov.com/java-nio/nio-vs-io.html -IO stream oriented blocking IO NIO buffer oriented non-blocking IO selectors -Stream oriented 한개 또는 그 이상의 byte 를 stream 에서 읽어온다. stream 에서 앞뒤로 왔다갔다 할 수 없다. ( buffer 를 사용해 cache 해야 가능하다. ) -Buffer oriented 우선 buffer 에 읽어오고 그 다음에 process 를 한다. buffer 를 통해 앞뒤로 왔다갔다 할 수 있다. -Blocking IO 는 read(), w.. 2017. 6. 11.
[Server구축/Tutorial] Top 에 대한 이야기 [Server구축/Tutorial] Top 에 대한 이야기 -Linux 시스템의 자원인 CPU, Memory 등의 사용률을 살펴보는 명령어. -CPU 에서 %us 는 커널이 아닌 user 에 의한 점유율 %sy 는 커널(system)에 의해 사용되는 CPU 점유율 %id 는 유휴(idle) CPU -메모리는 물리 메모리와 Swap 메모리로 구성된다. Swap 항목 부분의 used 수치가 지속적으로 증가하면 시스템 메모리가 매우 부족한 상황 total 은 전체 메모리 용량을 의미 used 는 현재 사용되고 있는 메모리 용량 free 는 사용되지 않는 여유 메모리 용량 실제로 linux 서비스를 운영하다 보면 항상 free 수치가 급격히 줄어드는데, 이는 메모리 부족이 아니라 linux 커널의 특징이다.메모.. 2017. 5. 13.
[java]DatagramSocket bind() connect() difference java, DatagramSocket bind() connect() difference DatagramSocket 의 bind() 와 connect() 의 차이 DatagramSocket ( UDP ) 에는 bind() 와 connect() 라는 두개의 함수가 있는데 두개 함수의 구분이 확실하지 않아 알아보았다. bind() 는 socket 에 port 를 연결하는 것. bind 를 한 process 에서 release 를 하기 전까지 이 port 는 다른 process 에서 쓸 수 없다. connect() 는 socket 에게 connect 를 하도록 하는 것이다. TCP/IP 가 아닌 UDP( datagram ) 의 경우는 사실 connect 가 꼭 필요한 것은 아니다. DatagramSocket 을.. 2013. 12. 10.
[android] Data 안전하게 저장하기, 안드로이드, Data 안전하게 저장하기. SharedPreference 와 SQLite 만 사용한다면 별로 걱정할 일이 없다.만약 File I/O API 를 직접 이용하면 문제가 된다.ext4 파일 시스템은 YAFFS ( 과거 안드로이드가 채택한 파일 시스템 ) 에 비해 훨씬 적극적으로 버퍼를 활용한다. 따라서 write() 와 close() 메서드를 호출했다고 해서 데이터가 실제 플래쉬 메모리에 저장되었다고 단언할 수 없다. 따라서 데이터를 저장할 때는 RandomAccessFile 의 synchronous 모드를 사용하는 것이 좋다. 이렇게 사용하면 내부적으로 fsync() 를 호출한다. FileOutputStream 을 사용하게 되면 다음과 같이 sync 를 시켜주어야 한다. public stati.. 2013. 9. 25.
반응형