본문 바로가기

전체273

자바8 inAction - [7] 병렬데이터 처리와 성능 병렬 데이터 처리와 성능 병렬 스트림으로 데이터를 병렬 처리하기 병렬 스트림의 성능분석 포크/조인 프레임워크 Spliterator로 스트림 데이터 쪼개기 스트림을 이용하면 순차 스트림을 병렬 스트림으로 자연스럽게 바꿀 수 있다. 어떻게 이런 방법같은 일이 일어날 수 있는지, 더 나아가 자바7에 추가된 포크/조인 프레임워크와 내부적인 병렬 스트림 처리는 어떤 관계가 있는가? 우선 여러 청크를 병렬로 처리하기 전에 병렬 스트림이 요소를 여러 청크로 분활하는 방법과, 이 원리를 이해하지 못하면 의도치 않은 설명하기 어려운 결과가 발생할 수 있다. 따라서 커스텀 Spliterator를 직접 구현하면서 분할 과정을 우리가 원하는 방식으로 제어하는 방법도 설명한다. 병렬 스트림 parallelStream 을 호출하.. 2019. 8. 31.
자바8 inAction - [6] 스트림으로 데이터 수집하기 스트림으로 데이터 수집 Collectors 클래스로 컬렉션을 만들고 사용하기 하나의 값으로 데이터 스트림 리튜스하기 특별한 리듀싱 요약 연산 데이터 그룹화의 분할 자신만의 커스텀 컬렉션 개발 다양한 요소 누적 방식 Collector 인터페이스에 정의 미리 정의된 컬렉션 Collectors에서 제공하는 메서드의 기능은 크게 세 가지로 구분 할 수 있다. 스트림 요소를 하나의 값으로 리듀스하고 요약 요소 그룹화 요소 분할 리듀스과 요약 counting() long howManyDishs = menu.stream().collect(Collectors.counting()); long howManyDishs = menu.stream().count(); Collectors.maxBy , Collectors.minB.. 2019. 8. 31.
자바8 inAction - [5] 스트림 활용 - 스트림 제대로 알고 사용하기. 스트림 활용 필터링, 슬라이싱, 매칭 검색, 매칭, 리듀싱 특정 범위의 숫자와 같은 숫자 스트림 사용하기 다중 소스로부터 스트림 만들기 무한 스트림 여기서는 기본적인 filter, map 등의 기본연산은 생략하고, 조금 더 실용적인 스트림 활용만을 정리해보자. 두 개의 숫자 리스트가 있을 때 모든 숫자 쌍의 리스트를 반환하시오. 예를 들어 두 개의 리스트 [1,2,3]과 [3,4]가 주어지면 [(1,3), (1,4), (2,3), (2,4), (3,3), (3,4)] 를 반환 List num1 = Arrays.asList(1,2,3); List num2 = Arrays.asList(3,4); List pairs = num1.stream().flatMap(i -> num2.stream() .map(j ->.. 2019. 8. 31.
자바8 inAction - [4] 스트림 소개 - 스트림과 콜렉션의 차이는 무엇인가? 01. 스트림이란 무엇인가? 컬렉션은 만들고 처리하는 과정을 포함. 대부분의 작업에서 필수적인 요소. 그러나 우리는 여기서 컬렉션이 가지지 못한 2가지 단점을 이야기해볼 수 있다. SQL과 같은 질의를 할 수 있는가? 많은 요소를 포함하는 커다란 컬렉션은 어떻게 처리해야 될까? 이 두가지 단점을 해결하기 위해 스트림이 출연. 스트림이란, 선언형(즉, 데이터를 처리하는 임시 구현 코드 대신 질의로 표현할 수 있다.)으로 컬렉션 데이터를 처리할 수 있다. 또한, 스트림을 이용하면 멀티스레드 코드를 구현하지 않아도 데이터를 투명하게 병렬로 처리할 수 있다. import static java.util.Comparator.comparing; List lowCaloricDishesName = menu.stream(.. 2019. 8. 31.
자바8 inAction - [3] 람다 표현식 - 람다란 무엇인가? 3장. 람다 표현식 1 람다란 무엇인가? 람다 표현식 메서드로 전달할 수 있는 익명 함수를 단순화한 것. 익명 함수 전달 간결성 2 어디에, 어떻게 람다를 사용할까? 함수형 인터페이스라는 문맥에서 람다 표현식을 사용할 수 있음. 함수형 인터페이스 => 정확히 하나의 추상 메서드를 지정하는 인터페이스 public interface Predicate { boolean test(T t); } 그외 public interface Callable { V call(); } 람다 표현식으로 함수형 인터페이스의 추상 메서드 구현을 직접 전달 할 수 있으므로 전체 표현식을 함수형 인터페이스의 인스턴스로 취급(기술적으로 따지면 함수형 인터페이스를 concreate 구현한 클래스의 인스턴스) 할 수 있다. 함수 디스크럽터 .. 2019. 8. 31.
포노사피엔스 - 북콘서트 포노 사피엔스 세미나 : 스마트폰이 낳은 신인류 in 코너스톤스페이스 00.4차 산업혁명의 본질? 1,2,3,4 차 산업혁명이 인류를 변화시킴 왜 우리는 4산업혁명의 본질을 얘기를 하지 않을까? BTS ? 비틀즈 ? => 강력한 국권력 가진 공통점이 있음. 왜 가수가 혁명일까? 바로, 음악소비생태계에 혁명이 왔다! -> BTS 돈 주고 / 사고 가수는 방송에서 떠야되는데? BTS는 데뷔를 유튜브에서 했다. 1400만명의 아미가 무보수로 온라인 마케팅을 해서 키움. 음악의 플랫폼이 이동하고 있다. 방송국에서 휴대폰의 유튜브으로 이동. 조만간 음악사들도 M&A 할 것이다. 3100만명의 한국사람들이 유튭을 본다. 5100만명 중에 은행도 마찬가지이다. 무인 서비스 / 쇼핑몰 / 은행도 마찬가지로 대부분의 흐.. 2019. 7. 30.
06. Process SynchronizationSubFile Process Synchronization : 프로세스 동기화 = Concurrency Control 프로세스 동기화가 되기 위한 3가지 조건 Mutual Exclusion(상호 배제) CS에 동시 접근이 안됨. ​ Progress CS에 아무것도 없을 때 누군가는 접근해야 할 때 허용하게 하는것. Bounded Waiting waiting time이 유한해야 한다는 말. 알고리즘 1 이 알고리즘에서는 turn이란 변수(Synchronization variable)을 사용하여 문제를 해결한다. Process A, Process B가 있다고 가정하고 코드를 살펴보자. A,B의 차이는 turn에 있음. Process A(turn 값 = 0) do { while(turn != 0); critical secti.. 2019. 7. 28.
맛집 리스트 - 검색 맛집 리스트 (전부 모아서 다시 업로드) ; 제목별로 검색하면 빠르다. 1. 평양냉면 2. 메밀국수 (소바) 3. 막국수 4. 콩국수 5. 국밥, 해장국 6. 설렁탕 7. 감자탕 8. 순대 9. 닭볶음탕 10. 추어탕 11. 육개장 12. 대구탕 13. 김밥 14. 김치찌개 15. 부대찌개 16. 청국장 17. 된장 18. 간장게장 19. 삼계탕 20. 보쌈 21. 족발 22. 치킨 23. 돈까스 24. 함박 스테이크 25. 떡볶이 26. 라면 27. 라멘 28. 우동 29. 튀김 30. 순두부, 두부 31. 피자 32. 아이스크림, 젤라또 33. 갓포요리집 34. 죽 35. 덮밥, 백반, 벤또(도시락) 36. 꼬치구이, 로바다야끼 37. 냉동삼겹살 38. 기사식당 39. 스테이크, BBQ 40. 칼국수.. 2019. 7. 28.
성공하는 직장인을 위한 고성과 업무기술 - 정상진 강사 성공하는 직장인을 위한 고성과 업무기술 (정상진 강사) [Index] -목적의식 -주인인식 -문제인식 -본 -촉 -맥 "내가 이 시간을 쓰기로 결정 했다면, 잘 쓰기를 연구하고 생각해야 한다." "우리는 디테일에, 그리고 숫자에 민감해야 된다." 목적의식 어떤 일을 해야만 할 때는 그 목표를 구체적으로 설정해야 한다. 그리고 언제나, 나에게 무슨 이득이 발생하는지 명확히 하라. 주인 의식 우리는 결코 회사에 대해 주인의식을 가질 수 없다. 왜냐하면, 우린 회사를 소유해본 경험이 없기 때문이다. 결혼 후에 자녀를 가진 사람은 자녀에 대한 사랑을 이해할 수 있을 테지만, 결혼해보지 못한 사람은 그 기분을 이해하지 못하는 것과 동일한 것이다. 문제 인식 언제나 경계하기. 문제에 대해서! 본 - 핵심,원인 탐구.. 2019. 7. 28.
06. Process Synchronization 데이터 접근(intro) 컴퓨터 시스템 안에서 어떻게 데이터가 접근하는가? Race Condition(경쟁 상태) 과연 컴퓨터에 경쟁상태가 많이 생길까? CPU라는 것은 자기의 주소공간만 본다아! 그래서 문제가 안생길거처럼 보이는데, CPU가 여러개 있는 멀티 CPU 프로세서 상태에서는 아닐 것! 특히 프로세스들이 본인 직접실행할 수 없을 경우 커널의 코드가 실행될 경우. OS에서 race condtion은 언제 발생하는가? Kernel 수행 중 인터럽트 발생시 Process가 System call을 하여 kernel mode로 수행 중인데 context switch가 일어나는 경우 Multiprocessor에서 shared memory 내의 kernel data Process Synchronizatio.. 2019. 7. 28.
05. CPU Scheduling-01 CPU Scheduling 스케줄링 알고리즘을 크게 2개로 나누면 (=강제로 빼앗지 않는 방법) 비선점형 Nonpreemptive (=강제로 빼앗는 방법) 선점형 preemptive CPU의 성능척도는? CPU utilization(이용률) - keep the CPU as busy as possible - CPU가 놀지 않고 일을 하는 시간 Throughput(처리량) - # of processes that complete their execution per time unit - 주어진 시간동안 몃개의 작업을 처리 했는가? Turnaround time(소요시간, 반환시간) - amount of time to execute a particular process - CPU를 쓰러 들어와서 다쓰고 I/O하러 .. 2019. 7. 28.
04. Process Management 프로세스 관리 프로세스 생성(Process Creation) Copy-On-Write(COW) 기법 부모프로세서의 코드데이터스택을 그대로 복사하기보다는 write가 발생할 때 Copy 하겠다. 그 이전까지는 부모프로세스의 코드데이터스택을 공유한다. 가능하면 공유하고 원칙적으로는 독립적이다. 부모 프로세스가 자식 프로세스를 복제해서 생성됨 프로세스의 트리(계층 구조)형성 프로세스는 자원을 필요로 함 운영체제로부터 받는다. 부모와 공유한다. 자원의 공유 부모와 자식이 모든 자원을 공유하는 모델 일부를 공유하는 모델 전혀 공유하지 않는 모델 수행(Execution) 부모와 자식은 공존하며 수행되는 모델 자식이 종료(terminate)될 때까지 부모가 기다리는(wait)모델 주소 공간(Address space).. 2019. 7. 28.
02.Process 프로세스 프로세스의 개념 "Process is a program in execution" 프로세스의 문맥(context) 특정 시점을 놓고 봤을때, 어디까지 수행을 했는가를 알려주는 것! CPU 수행 상태를 나타내는 하드웨어 문맥 Program Counter 프로그램 카운터가 코드를 가르키고 있어, 현재 상태를 저장한다. 각종 register 프로세스의 주소 공간 프로세스 관련 커널 자료구조 PCB(Process Control Block) Kernel stack 과거의 상태를 현재에 정확하게 상태를 규명하는 것을 문맥이라고 한다. 문맥은 위와 같이 크게 3개에 따라 분류할 수 있다. 프로세스의 DATA 영역 안에 PCB로 저장한다. 프로세스 하나 실행할 때마다 PCB를 얼마나? 메모리를 얼마나? 줘야할지.. 2019. 7. 28.
01.컴퓨터 구조와 프로그램 실행 컴퓨터 구조와 프로그램 실행 하드웨어 및 동작에 대한 이해 메모리라는 것은 CPU의 작업 공간. CPU는 매 클럭 순간, Mode bit -> 사용자 모드 ? 운영체제 모드? 임을 선택하게 해준다. 100만배 차이, CPU가 디스크에 비해 100만 느리다? CPU는 항상 메모리와 일한다! CPU는 계속 메모리에 접근해서 IO에 대한 데이터 구조를 참고한다. CPU는 IO controller에게 일을 시키고 계속 메모리에 접근하면서 인터럽트를 한다. 인터럽트란 컨트롤러들이 CPU의 서비스가 필요할 때 이를 통보하는 방법을 말한다. 만약 무한 루프를 실행했을 때, CPU가 하나의 Memory만 계속 참조한다면, 이때 timer가 동작한다. timer가 한 메모리에 독점하지 않도록 해준다. 운영체제가 CPU를.. 2019. 7. 28.
You don't know JS : 타입과 문법, 스코프와 클로저 - 10. 스코프/클로저 스코프 클로저 깨달음 클로저? 클로저는 자바스크립트의 모든 곳에 존재한다. 그저 인식하고 받아들이면됨. 클로저는 렉시컬 스코프에 의존해 코드를 작성한 결과로 그냥 발생한다. 이용하려고 굳이 의도적으로 클로저를 생성할 필요가 없다. 모든 코드에서 클로저는 생성되고 사용된다. 그러므로 여기서 적절히 클로저의 전반을 파악하면 클로저를 목적에 따라 확인하고, 받아들이고, 이용할 수 있다. 핵심 클로저는 함수가 속한 렉시컬 스코프를 기억하여 함수가 렉시컬 스코프 밖에서 실행될 때에도 이 스코프에 접근할 수 있게 하는 기능을 뜻한다. 크도를 보면서 앞의 정의가 설명한 바를 살펴보자. function foo(){ var a = 2; function bar(){ console.log(a) } bar(); } foo().. 2019. 7. 27.
You don't know JS : 타입과 문법, 스코프와 클로저 - 9. 호이스팅 호이스팅 닭이 먼저냐, 달걀이 먼저냐 코드가 한 주 한 줄 위에서부터 차례대로 해석될 것이라고 생각하기 쉽다. 대체로 옳은 생각이지만, 바로 이런 추정 때문에 프로그램을 잘못 이해 할 수 있다. a = 2; var a; console.log(a); ??? 답은 2가 나온다 왜?? 위에서 아래로 처리되는 방식이 아니었으니 이번 코드에서도 그런 식으로 처리되어 똑같이 2가 출력되리라 생각할지도 모른다. 또는 a가 선언되기 전에 사용되었으니 ReferenceError가 발생한다고 생각할 수도 있다. 불행히도 둘 다 틀렸다. 출력 결과는 undefined이다. 무엇이 먼저일까. 선언문(달걀)일까? 아니면 대입문(닭)일까? 컴파일러는 두 번 공격한다. 자바스크립트 엔진이 코드를 인터프리팅하기 전에 컴파일한다는 사.. 2019. 7. 27.
You don't know JS : 타입과 문법, 스코프와 클로저 - 8. 함수 VS 블록스코프 함수 vs블록 스코프 함수 기반 스코프 function foo(a){ var b= 2; //some code function bar(){ // ... } //more code var c = 3; } 만약 console.log(a,b,c) 찍으면 모두 ReferenceError 발생할것 함수 스코프는 모든 변수가 함수에 속하고 함수 전체(심지어 중첩된 스코프에서도)에 걸쳐 사용되며 재사용된다는 개념을 확고하게 한다. 이런 디자인 접근법은 상당히 유용하고 자바스크립트 변수의 '동적 특성을 완전히 살려 다른 타입의 값을 필요에 따라 가져올 수 있지만, 스코프 전체에서 변수가 살아있다는 점이 예상치 못한 문제를 일으킬 수 있다. 일반 스코프에 숨기 함수를 선언하고 그 안에 코드를 넣는다. 바꿔 생각해보는.. 2019. 7. 27.
You don't know JS : 타입과 문법, 스코프와 클로저 - 5. 문법 문법 문(Statement)과 표현식(Expression) 문장(Sentance)은 생각을 표현하는 단어들의 완전한 조형물. 문장은 하나 이상의 어구(Pharse)로 구성되며, 각 어구는 구두점이나 접속사로 연결할 수 있고 어구는 더 작은 어구로 나눌 수있다. 어떤 어구는 불완전하여 그 자체로 완성된 문장을 형성할 수 없지만 스스로의 힘만으로 완성되는 어구도 있다. 문은 문장 표현식은 어구 연산자는 구두점/접속사에 해당된다. 문의 완료값 var b; if(true){ b = 4 + 38; } 결과는 42 그러나 var a, b; a = if(true){ b = 4 + 38; } 안됨. 왜냐하면 문의 완료값이 존재하기 때문에! 표현식의 부수 효과 var a = 42; var b = a++; a = 43 /.. 2019. 7. 27.
You don't know JS : 타입과 문법, 스코프와 클로저 - 4. 강제변환 자동타입변환 = 강제적 타입변환 = 타입 강제변화 값 변환 var a = 42; var b = a + ""; // 암시적 강제변환 var c = String(a); // 명시적 강제변환 변환을 어떻게 할 것인가? '명시적' : '암시적' = '명백한' : '숨겨진 부수 효과' 용어상으로는 이러한 대응 관계가 성립 추상 연산 ToString '문자열이 아닌 값 => 문자열' 변환 작업은 ToString 추상 연산 로직이 담당 // 1.07 에 1000 을 7번 var a = 1.07 * 1000 * 1000* 1000* 1000* 1000* 1000 a.toString(); // 1.07e21 JSON 문자열화 ToString은 JSO.. 2019. 7. 27.
You don't know JS : 타입과 문법, 스코프와 클로저 - 3. 네이티브 #네이티브 String() Number() Boolean() Array() Object() Function() RegExp() Date() Error() Symbol() 대표적인 자료형 하지만 자바와 달리 String()이 String이 아니고 Object 이다. 내부 [[ Class ]] typeof가 'object'인 값(배열 등)에는 [[class]]라는 내부 프로퍼티가 추가로 붙는다. 이 프로퍼티는 직접 접근할 수 없고 Object.prototype.toString()라는 메서드에 값을 넣어 호출합니다. 래퍼 박싱 var a = "abc"; a.length; // 3 a.toUpperCase(); // "ABC" 객체 래퍼의 함정 var a = new Boolean(false); i.. 2019. 7. 27.