분류 전체보기(754)
-
[CS] 프로세스 상태에 대한 나름의 이해
프로세스의 상태는 다음과 같다. 생성, 준비, 실행, 대기, 종료 생성(new): 프로세스가 PCB를 가지지만 OS로부터 다른 자원이 준비되어야지만 준비 단계로 갈 수 있다. 준비(ready): OS의 승인을 받으면 ready queue 안으로 들어간다. 실행(running): 준비 상태에서 우선 순위에 따라 실행이 된다. 이를 디스패치라고 한다. 만약 가다가 timeout이 발생하면 다시 준비 상태로 돌아간다. (ready queue 안으로 들어간다) 대기(waiting): 입출력이나 이벤트가 발생하면 대기 상태로 간다. 끝나면 다시 준비 상태로 돌아간다. 종료(exit): 작업이 끝난 프로세스가 종료된다. 종료 되기 까지 준비, 실행, 대기 사이클을 돌게 된다.(대기는 없을 수도 있다) Referen..
2023.10.09 -
[CS] 멀티프로그램밍에 대한 유사한 명칭에 대한 나름의 이해
Multiprogramming Multiprocess Multitasking Time sharing 등은 다 유사한 개념으로 강조하는 바가 조금씩 다르다. Multiprogramming은 프로그램이 여러개가 실행될 수 있다는 것이고 Multiprocess는 이와 유사하게 프로세스가 여러 개 있을 수 있다는 것이고 Multitasking은 한번에 여러 작업을 할 수 있다는 것이고(동시에 하는 것처럼 보이게) Time sharing은 시간을 나누어서 CPU를 쓴다는 CPU에 초점을 맞춘 것이다. 다만 Multiprocessor는 하나의 컴퓨터에 프로세서(CPU)가 여러개 달려 있다는 의미로 다르다. 여러 개의 CPU로도 위의 개념들을 할 수 있지만 하나의 CPU로도 위의 개념들을 수행할 수 있다. Refer..
2023.10.09 -
[Spring] 롬복에 대한 나름의 이해
롬복(Lombok)은 getter, setter 및 constructor를 자동으로 만들어준다. 예를 들어 @Getter, @Setter를 붙이면 필드인 name과 age와 관련하여 setName, getName 등을 자동적으로 만들어준다. 또한 @RequiredArgsConstructor를 붙이면 final이 붙은 상수에 대해서 자동으로 Constructor를 만들어준다. 실제 class 파일을 열어보면 @Autowired가 붙은 생성자를 볼 수 있다. 이것의 장점은 final 상수가 추가될 때마다 따로 생성자를 변경하지 않아도 된다는 점이다. Reference https://www.inflearn.com/course/lecture?courseSlug=%EC%8A%A4%ED%94%84%EB%A7%81-..
2023.10.09 -
[Spring] gradle lombok 설정할 때 버전 오류 해결
오류 Unsupported Java. Your build is currently configured to use Java 20.0.2 and Gradle 8.2.1. Possible solution: - Use Java 19 as Gradle JVM: Open Gradle settings - Open Gradle wrapper settings, change `distributionUrl` property to use compatible Gradle version and reload the project 원인 - 아래와 같이 compileOnly와 annotationProcess를 한 줄에 붙이면 위와 같은 오류가 난다. dependencies { implementation 'org.springframew..
2023.10.09 -
[알고리즘][X] 두 큐 합 같게 만들기
문제 설명 길이가 같은 두 개의 큐가 주어집니다. 하나의 큐를 골라 원소를 추출(pop)하고, 추출된 원소를 다른 큐에 집어넣는(insert) 작업을 통해 각 큐의 원소 합이 같도록 만들려고 합니다. 이때 필요한 작업의 최소 횟수를 구하고자 합니다. 한 번의 pop과 한 번의 insert를 합쳐서 작업을 1회 수행한 것으로 간주합니다. 큐는 먼저 집어넣은 원소가 먼저 나오는 구조입니다. 이 문제에서는 큐를 배열로 표현하며, 원소가 배열 앞쪽에 있을수록 먼저 집어넣은 원소임을 의미합니다. 즉, pop을 하면 배열의 첫 번째 원소가 추출되며, insert를 하면 배열의 끝에 원소가 추가됩니다. 예를 들어 큐 [1, 2, 3, 4]가 주어졌을 때, pop을 하면 맨 앞에 있는 원소 1이 추출되어 [2, 3, ..
2023.10.09 -
[파이썬] 메모리 누수와 약한 참조에 대한 나름의 이해
파이썬에서도 메모리 누수가 발생할 수 있다. 예를 들어, 객체의 필드가 다른 객체를 참고하는 서로 참고 하는 경우 del을 해도 제거되지 않는다. gc가 실행되는 건 참조수가 0이어야지만 가능한데 위의 경우는 참조수가 0이 되지 않기 때문이다. 이를 해결하기 위해 약한 참조를 사용한다. 약한 참조는 참조를 하더라도 참조수를 올리지 않는다. 이러한 약한 참조는 순환 참조에 유용하다. 결국 파이썬에서 메모리 누수나 gc등의 문제를 고려하기 위해서는 참조수가 제일 중요하다!!(기본 원리이기 때문이다) 또한 아래와 같은 상황에서 foo()를 호출하게 되면 메모리 누수가 발생할 수 있다. 왜냐하면 파라미터 a의 디폴트가 []인데 여기에 계속 값이 쌓이는 형태로 바뀌기 때문이다. 예를 들어, a[xx, xx] 이런..
2023.10.09