0.dpdk 16.11 기준 lib/lib_ring/rte_ring.h ring queue이다.multi producer, multi consumer 에 대해서도 atomicity 보장을 이용해 lock 없이 동작한다.일반 ring에서의 producer, consumer가 multi 성격을 인정하면서producing/ consuming range 느낌으로.. ㅎㅎ head와 tail을 갖는다. 1번 consumer가 consuming에 뛰어 들어 cons.head를 움직이면2번 consumer가 consuming에 또 뛰어 들 수 있다.다만 1번 consumer가 먼저 종료할 때 까지 2번은 기다려야 한다. 1. multiwriter에 대해서 어떻게 safe하게 되는지는 아래 함수 하나만 보면 된다.아래..
자바 성능 튜닝 이야기 요약 (ch1 - 8)Table of Contents1. desdign pattern1.1. Transfer Object1.2. Service Locator2. APM3. String3.1. string builder3.2. string buffer4. Collection4.1. Set4.1.1. HashSet4.1.2. TreeSet4.1.3. LinkedHashSet4.2. red black tree4.3. List4.3.1. Vector4.3.2. ArrayList4.3.3. LinkedList4.4. Map4.4.1. HashTable4.4.2. HashMap4.4.3. TreeMap4.4.4. LinkedHashMap4.5. Queue4.5.1. priorityQueue4..
1. CAS 일반적으로 쓰는 락은 소프트웨어 락으로, 인스트럭션이 굉장히 많이 소모 된다. 하드웨어 lock은 CAS를 어셈으로 구현하고, compare and set을 수행될 때까지 루프를 도는 spin lock을 말한다. lock에 소모되는 인스트럭션 수가 적어 훨씬 빠르다. 하지만 spin lock이니 lock acquire까지 너무 많은 시간이 소요될 경우 비효율 적이다. 어셈으로 구현되다 보니, 아키텍쳐마다 구현이 다르다. DPDK에서 지원하는 락이 CAS로 구현되어 있다. 2. RCU read-copy-update. publish and subscribe 모델의 일종. read가 읽고 있을때 update가 발생하면 복사본을 만든다. read가 다 읽으면 reader가 바라보고 있는 포인터를 새..