본문 바로가기
[Java Concurrency] 명시적인 락 13.1. Lock 과 ReentrantLock - Lock 인터페이스는 암묵적인 락과 달리 조건 없는(unconditional)락, 폴링 락, 타임아웃이 있는 락, 락 확보 대기 상태에 인터럽트를 걸 수 있는 방법 등이 포함돼 있으며, 락을 확보하고 해제하는 모든 작업이 명시적이다. - public interface Lock{ void lock(); void lockInterruptibly() throws InterruptedException; boolean tryLock(); boolean tryLock(long timeout, TimeUnit unit) throws InterruptedException; void unlock(); Condition newCondition(); } - Reentran.. 2017. 5. 5.
[Java Concurrency] 성능, 확장성 #2 [Java Concurrency] 성능, 확장성 #2 11.4. 락 경쟁 줄이기- 작업을 순차적으로 처리하면 확장성(scalability)을 놓치고, 작업을 병렬로 처리하면 컨텍스트 스위칭에서 성능에 악영향을 줄 수 있다. 따라서 락을 놓고 경쟁하는 상황이 벌어지면 순차적으로 처리함과 동시에 컨텍스트 스위칭도 많이 일어나므로 확장성과 성능을 동시에 떨어뜨리는 원인이 된다. 즉 락 경쟁을 줄이면 줄일수록 확장성과 성능을 함께 높일 수 있다. - 병렬 앱에서 확장성에 가장 큰 위협이 되는 존재는 바로 특정 자원을 독점적으로 사용하도록 제한하는 락이다. - 락을 두고 발생하는 경쟁 상황에는 크게 두 가지를 생각해 볼 수 있다. 락을 얼마나 빈번하게 확보하려고 하는지, 한 번 확보하고 나면 해제할 때까지 얼마나.. 2017. 5. 4.
[Java Concurrency] 스레드 풀 활용 [Java Concurrency] 스레드 풀 활용 8.1. 작업과 실행 정책 간의 보이지 않는 연결 관계 - 일정한 조건을 갖춘 실행 정책이 필요한 작업에는 다음과 같은 것들이 있다. 의존성이 있는 작업 스레드 한정 기법을 사용하는 작업 응답 시간이 민감한 작업 ThreadLocal 을 사용하는 작업 - 스레드 풀은 동일하고 서로 독립적인 다수의 작업을 실행할 때 가장 효과적이다. - 특정 작업을 실행하고자 할 때 그에 맞는 실행 정책을 요구하는 경우도 있고, 특정 실행 정책 아래에서는 실행되지 않는 경우도 있다. 다른 작업에 의존성이 있는 작업을 실행해야 할 때는 스레드 풀의 크기를 충분히 크게 잡아서 작업이 큐에서 대기하거나 등록되지 못하는 상황이 없도록 해야 한다. 스레드 한정 기법을 사용하는 작업.. 2017. 4. 27.
[라오스 방비엥] 또 다른 하이라이트!! 블루라군 #2 [라오스 방비엥] 또 다른 하이라이트!! 블루라군 #2 자 이제 높은 곳 다이빙을 도전한다. 낮은 곳에 갈 때도 "이건 껌이겠군?" 이란 맘으로 갔다가."어? 생각보다 높네?" 라는 느낌을 받았었기 때문에, 높은 곳에 가려니 살짝 겁이 난다. 괜히 담담한 척 하며 대나무 다리 위를 차근차근 올라간다. 올라가니 역시나 무섭다.밑에서 보는 것과 높이가 다르다.. 낮은 곳과는 비교가 안 되겠군 싶었지만,그 예상보다 더 무서웠다.. 뭔가 즐겁게 야호~ 하면서 뛰어 내리고 싶었는데.. 그래야 놀이이고 재미인데..아... 이걸 꼭 뛰어야 하나? 무엇을 위해서 여기서 겁 먹으면서 뛰어내려야 하나? 싶다. 그런데 이곳에서 뛰어내리지 않고 블루라군을 다녀왔다고 하면 안 될 것 같았다. 아래쪽에서 다이빙 하는 사람이 있나.. 2017. 1. 13.
[라오스 방비엥] 또 다른 하이라이트!! 블루라군 #1 [라오스 방비엥] 또 다른 하이라이트!! 블루라군 #1 아침시장에서 롱안과 롱꽁을 신나게 까먹은 우리는,또 다른 라오스의, 그리고 방비엥의 하이라이트인 블루 라군으로 향한다. 블루라군의 라군은 원래 한국어로 "석호" 라고 하며,사주나 사취( 모래가 쌓여서 만드는 길 또는 벽) 의 발달로 바다와 격리된 호수를 가르키는 말이다. 즉 블루라군은 그런 형태의 파란 호수를 다 가리킬 수 있는 말인데,라오스의 블루라군은 고유명사로서 한 지역을 가르키는 것처럼 되었다. 그래서 그 의미에 충실한, 제 2의 블루라군이 방비엥에 생겼지만,아직은 제 1의 블루라군이 가장 인기가 좋은 것 같다. 블루라군에 가려면 남쏭(쏭 강)을 다리를 통해 건너야 하는데,방비엥 시내쪽에서 건널 때 한번에 통행료 왕복 티켓을 끊는 방식이다. .. 2017. 1. 12.
[라오스 방비엥] 하이라이트 - 튜빙시작 [라오스 방비엥] 하이라이트 - 튜빙시작 자 드디어 방비엥의 하이라이트 중 하나인 "튜빙" 에 대한 이야기를 시작할꺼야. 너무 기대를 시켜서 실망도 클까봐 걱정되네~사실 튜빙 이야기가 별로 이야긴는 없을꺼야.왜냐면 대부분 그냥 풍경 감상이 될꺼거든 ㅋㅋ 원래 튜빙은 보통 점심 혹은 그 이후에 많이 하는 것 같은데,우리는 딱히 할일도 없어 빠르게 튜빙을 시작했어. 이곳이 튜브를 대여해주고, 튜빙을 시작하는 상류로 우리를 대려다줄 튜빙샵!!관광객 상대에 이골이 났는지,별로 친절하지도 않고, 귀찮음이 물씬 묻어났어 ㅎ 영어로 튜빙에 대한 설명이 써 있어.오전 9시 ~ 오후 4시까지 대여를 하며, 예약할 필요는 없다.튜브 대여료는 55,000Kip ( 한화 약 7,700원 ).그리고 보증금은 60,000 Kip.. 2016. 12. 6.
[Effective Java] 가급적 상속(inheritance) 보다는 컴포지션(composition)을 사용하자. 가급적 상속(inheritance) 보다는 컴포지션(composition)을 사용하자. - 상속은 코드를 재사용하는 강력한 방법이다. 그러나 일을 하는데 가장 좋은 도구는 아니다. 잘못 사용하면 부실한 소프트웨어를 초래한다. - 동일 프로그래머가 서브 클래스와 수퍼 클래스의 구현을 관장하는 같은 패키지 내에서 상속을 사용하는 것은 안전하다 상속을 위해 특별히 설계되고 문서화된 클래스를 확장(extends) 하기 위해 상속을 사용하는 것도 안전하다. 그러나 다른 패키지에 걸쳐 일반적인 실체 클래스로부터 상속을 받는 것은 위험하다. - 상속은 캡슐화(encapsulation) 을 위배한다. 올바른 동작을 위해 서브 클래스는 자신의 수퍼 클래스가 구현하는 상세 내역에 의존한다. 수퍼 클래스의 구현 내역은 소프.. 2016. 10. 27.
[책 정리] 먹고 단식하고 먹어라 #3 - 단식을 둘러싼 갖가지 오해 먹고 단식하고 먹어라 #3 - 단식을 둘러싼 갖가지 오해 출처 : 먹고 단식하고 먹어라 - 먹는 행위는 대사율을 극소량 증가시키는데 이를 음식의 열 효과라고 한다. 이러한 대사율의 증가는 우리 몸이 음식을 소화하고 처리하는 데 추가로 에너지를 사용하기 때문에 나타나는 현상이다. - 목구멍으로 넘어간 음식을 잘게 쪼개고 소화하고 흡수하고 저장하는 데 에너지가 필요하다. 이 에너지 비용을 실험실에서 측정했고 이는 어떤 영양소가 다른 영양소보다 대사 비용이 높다는 식으로 다이어트 홍보의 수단이 됐다. 예를 들면 탄수화물이나 지방을 소화하는 것보다 단백질을 소화할 때 더 많은 칼로리가 소모된다. - 우리 몸이 추가로 태울 수 있는 칼로리의 양은 극히 적으며 하루에 소모하는 전체 칼로리는 거의 달라지지 않는다. .. 2016. 6. 24.
[android] Serialization 을 사용할 때 다음의 예외를 고려하자. [android] Serialization 을 사용할 때 다음의 예외를 고려하자. serialVersionUID 를 명시적으로 주자. serialVersionUID 를 명시적으로 주지 않으면, compiler 가 계산한 값을 부여한다. 환경이 변하지 않으면 좋겠지만, compiler 가 계산한 값은 상황에 따라 값이 달라질 수 있다. serialVersionUID 가 매치하지 않는 경우에 deserialize 하려고 시도하면 InvalidClassException 이 발생한다. 잠재적 위험을 피하기 위해 serialVersionUID 를 명시적으로 주는 것이 좋다. 만~약 이전 버전에 이미 compiler 가 자동으로 할당한 serialVersionUID 값을 사용하게 되었다면, 그 값을 찾아 명시적으로.. 2015. 12. 17.
반응형