20220521 TIL

Don Lee·2022년 5월 22일
0

EpiTIL

목록 보기
12/24

/api/courses/{id}에서 {id}는 다른 무언가여도 된다. {abc}도 괜찮다.

@PutMapping("/api/courses/{id}")
public Long updateCourse(@PathVariable Long id, @RequestBody CourseRequestDto requestDto) {
    return courseService.update(id, requestDto);
}

courseRepository.deleteById(*id*);는 아무것도 리턴을 하지 않기 때문에 오류가 발생한다. 아래와 같이 바꿔주야 한다.


014

프로세서:

while(true){
인출,
해석,
실행
}

컴퓨터 아키텍쳐:

상충관계: 기능성 ↔ 복잡도 ↔ 전력 소모 정도 ↔ 프로그램 가능성 등

E=C×f×V2×tE = C×f×V^{2×t}

  • C:한클럭주기당스위칭된전기용량C: 한 클럭 주기 당 스위칭된 전기용량
  • f:주파수f: 주파수
  • v:전압v: 전압
  • t:시간t: 시간
💡 $CPU에서소비되는에너지E∝f^2$

015

CPU 칩에는 여러 개의 캐시가 들어가며, 각각의 캐시는 각자의 목적과 역할을 가지고 있다.

Untitled

+-------------+------+------+     +---------------+     +--------+
|             |  I$  |      | <-- |               | <-- |        |
+  Processor  +------+  L2  |     |  Main Memory  |     |  Disk  |
|             |  D$  |      | --> |               | --> |        |
+-------------+------+------+     +---------------+     +--------+
  • L1 Cache: 프로세서와 가장 가까운 캐시. 속도를 위해 ID와 D로 나뉜다.
    • Instruction Cache (I$): 메모리의 TEXT 영역 데이터를 다루는 캐시.
    • Data Cache (D$): TEXT 영역을 제외한 모든 데이터를 다루는 캐시.
  • L2 Cache: 용량이 큰 캐시. 크기를 위해 L1 캐시처럼 나누지 않는다.
  • L3 Cache: 멀티 코어 시스템에서 여러 코어가 공유하는 캐시.

캐시에 달러 기호($)를 사용하는 이유는 캐시(Cache)의 발음이 현금을 뜻하는 'Cash’와 같기 때문.

더 작은 수를 for문의 외곽으로 뽑아낼수록 유의미한 성능 향상이 있다.

public classPrac{
    public static void main(String[]args) {
        int[][] arr = new int[2][5];

        int k = 1;
        for (int i = 0; i < arr.length; i++) {
            for (int j = 0; j < arr[i].length; j++) {
                arr[i][j] = k;//인덱스를 이용한 초기화
									k += 1;
            }
        }

        for (int i = 0; i < arr.length; i++) {
            for (int j = 0; j < arr[i].length; j++) {
System.out.print(arr[i][j] + " ");
            }
System.out.println();
        }
    }
}
1 2 3 4 5 
6 7 8 9 10

[0,1] = 2번

[1,2,3,4,5],[6,7,8,9,10] = 10번

package com.sparta.week1.prac;

public class Prac {
    public static void main(String[] args) {
        int[][] arr = new int[5][2];

        int k = 1;
        for (int i = 0; i < arr.length; i++) {
            for (int j = 0; j < arr[i].length; j++) {
                arr[i][j] = k; // 인덱스를 이용한 초기화
                k += 1;
            }
        }

        for (int i = 0; i < arr.length; i++) {
            for (int j = 0; j < arr[i].length; j++) {
                System.out.print(arr[i][j] + " ");
            }
            System.out.println();
        }
    }
}
1 2 
3 4 
5 6 
7 8 
9 10

[0, 0, 0, 0, 0] = 5번

[1,2],[3,4],[5,6],[7,8],[9,10] = 10번

@Benchmark
public void test1() {
    long count = 0;
    for(long i = 0; i < 10_000_000; i++) {
        for(long j = 0; j < 100; j++) {
            BigDecimal big = new BigDecimal("1000");
            count++;
        }
    }
}
@Benchmark
public void test2() {
    long count = 0;
    for(long i = 0; i < 100; i++) {
        for(long j = 0; j < 10_000_000; j++) {
            BigDecimal big = new BigDecimal("1000");
            count++;
        }
    }
}

test1() 은 외부 10,000,000회 / 내부 100회로 총 10억회의 루프를 돌며

test2() 은 외부 100회 / 내부 10,000,000회로 역시 총 10억회의 루프를 돈다.

루프 내부에 BigDecimal을 생성하는 부분이 있는데 루프에 약간의 부하를 주기 위한 장치.

*// test1()*Result "bench.ForLoop.test1":
  15981.999 ±(99.9%) 1890.234 ms/op [Average]
  (min, avg, max) = (15350.046, 15981.999, 16617.751), stdev = 490.888
  CI (99.9%): [14091.766, 17872.233] (assumes normal distribution)
  
  
*// test2()*Result "bench.ForLoop.test2":
  16013.786 ±(99.9%) 520.377 ms/op [Average]
  (min, avg, max) = (15836.663, 16013.786, 16182.794), stdev = 135.140
  CI (99.9%): [15493.410, 16534.163] (assumes normal distribution)

test1() 메소드의 경우 1.89초의 수행 시간이 발생했고

test2() 메소드의 경우 0.52초의 수행 시간이 발생했다.

for문도 Heap 메모리에 지역변수 선언, 조건 판단&분기, 연산의 과정을 거치는데

이 일련의 과정들이 캐시 되고 속도가 가장 빠른 L1에 100개의 지역변수를 넣는 것이 속도에 유리하기 때문.

016

분산 컴퓨팅: 네트워크로 연결되어 서로 독립적으로 작용하는 여러 대의 컴퓨터를 일컫는 말.

  • SETI@Home (Search for Extraterrestrial Intelligence, 외계 지적생명체 탐사) 프로젝트
  • P2P: bittorrent, bitcoin 등

튜링 테스트: 컴퓨터가 인간 수준의 지적 능력을 보여 줄 수 있는지를 평가하는 데 사용하는 테스트.


https://parksb.github.io/article/29.html

https://ko.wikipedia.org/wiki/누산기

https://shirohoo.github.io/backend/java/2021-05-11-for-loop/

https://ko.wikipedia.org/wiki/병렬_컴퓨팅

https://s-space.snu.ac.kr/bitstream/10371/81522/1/12정보과학회지저전력.pdf

profile
쾌락코딩

0개의 댓글