전체 글 100

Java > Concurrency > Thread scheduling

스케줄링CPU에 어떤 프로그램이 얼마의 시간동안 실행될지를 OS가 결정하는 것 단순히 시간으로만 작업을 분할하지는 않고 다양한 우선순위와 최적화 기법을 사용한다 동작 예OS는 내부에 스케줄링 큐를 가지고 있고 쓰레드들은 큐에서 대기한다OS는 큐에서 쓰레드 A를 꺼내 CPU를 통해 실행한다OS는 쓰레드 A를 잠시 멈추고 큐에 다시 넣는다OS는 쓰레드 B를 꺼내 CPU를 통해 실행한다이러한 과정을 반복한다 CPU core가 2개 이상이면 위 작업을 물리적으로 동시에 실행할 수 있다

Java/Concurrency 2024.09.03

Java > Concurrency > 4. Thread methods

쓰레드 프로그래밍이 어려운 이유는 동기화와 스케줄링 때문이다 효율적인 멀티 쓰레드 프로그램을 만들기 위해서는 보다 정교한 스케줄링을 통해 프로세스에게 주어진 자원과 시간을 여러 쓰레드가 낭비 없이 잘 사용하도록 프로그래밍 해야 한다 스케줄링을 위해 쓰레드의 상태와 상태 변경 메서드를 학습할 필요가 있다. 쓰레드의 상태는 아래 글에 설명해두었다2024.09.05 - [Java/Concurrency] - Java > Concurrency > 3. Thread info  Thread 클래스의 메서드void stop(), void suspend(), void resume()교착상태를 일으키기 쉽게 작성되어 있어, 사용자제(@Deprecated) 메서드로 정해졌다 해당 API를 사용하지 말고 아래와 같이 유사 기..

Java/Concurrency 2024.08.30

Java > Concurrency > 5. Daemon thread

명명 이유Daemon다이몬(고대 그리스 신화 속에 나오는 반신 반인의 존재) 신화에서 데몬은 신과 인간 사이의 중간적 존재로서 보이지 않게 활동하며 일상적인 일을 도왔다. 이를 차용하여 CS에서는 사용자에게 직접적으로 보여지지 않으면서 백그라운드로 작업을 수행하는 것을 데몬 프로세스/쓰레드라고 말한다 현대 그리스어 발음이 데몬이라 한국에서 데몬으로 읽는 것 같다  특징데몬 쓰레드는 다른 Non-daemon(일반, 사용자) 쓰레드의 작업을 돕는 보조적인 역할을 수행한다 모든 사용자 쓰레드가 종료되면 JVM도 종료된다. 이때 데몬 쓰레드도 자동 종료된다 데몬 쓰레드의 예GC워드 프로세서의 자동저장화면 자동 갱신..  코드 작성무한 반복문과 조건문을 이용해 실행 후 대기하고 있다가 특정 조건이 만족되면 작업을..

Java/Concurrency 2024.08.29

Java > Concurrency > Context switching

Context의 사전적 뜻은 문맥이다. 여기서 문맥이라 함은 현재 작업하는 문맥을 말한다. 하나의 작업을 위해 메모리에 있는 값을 CPU가 읽고 작업 전환을 위해 CPU의 값을 다시 메모리에 저장하고, 이런 문맥을 전환하는 것을 컨텍스트 스위칭이라 한다 쓰레드 간의 작업 전환으로 인해, 단일 쓰레드로 작업한 시간보다 여러 쓰레드로 작업한 시간이 더 오래 걸리기도 한다 작업 전환 시 현재 작업의 상태(다음에 실행해야할 위치, Program Counter 등)를 저장하고 읽어 오는 시간이 소요된다 싱글 코어에서 CPU만을 사용하는 단순한 계산 작업을 할 때 오히려 싱글 쓰레드로 프로그래밍하는 것이 더 효율적이다https://github.com/venzersiz/learn-java8/blob/master/sr..

Java/Concurrency 2024.08.29

Java > Concurrency > 1. Process, Thread

Multi taskingOS가 여러 개의 프로세스를 동시에(실제로는 아주 짧은 시간에 번갈아가며) 실행하는 기술OS 소프트웨어 관점 OS의 스케줄링 기법을 사용하며 실행 단위는 프로세스가 아닌 쓰레드다  Multi processing둘 이상의 프로세서(CPU core)를 사용하여 여러 작업을 동시에(실제로 ) 처리하는 기술하드웨어 장비 관점  ProcessOS로부터 자원을 할당받아 실행 중인 프로그램 실행 중인 프로그램의 인스턴스 독립적인 메모리 공간을 가지며 서로 접근 불가 메모리 구조Code section실행할 프로그램의 코드 저장Data section전역/정적 변수 저장Heap(Memory)동적 할당 영역 Thread모든 프로세스에는 최소 하나의 쓰레드가 존재한다Stack함수 호출 시 생성되는 지역..

Java/Concurrency 2024.08.29

Linux > 문자열 사용 시 따옴표

따옴표를 쓰지 않는 경우단순 문자열 사용 echo HelloHello 변수 참조나 명령어 확장이 필요할 때도 따옴표를 사용하지 않는다 echo $USERkrevis echo $(date)echo `date`Tue Aug 27 10:00:17 KST 2024  따옴표 써야하는 경우공백 등의 특수문자를 사용 string=My name is $USER-bash: name: command not found string="My name is $USER"echo $stringMy name is krevis  쌍따옴표와 홑따옴표의 차이쌍따옴표를 사용하면 변수/명령어 치환, 이스케이프 등이 동작한다echo "Hello $USER, today is `date`"Hello irteam, today is Tue Aug 27..

OS/Linux 2024.08.27

Linux > Redirection 연산자

출력 리디렉션명령의 출력을 파일로 보낸다파일이 없으면 새로 성성하고, 있으면 덮어쓴다 ls > file.txt덧붙이기echo Something >> file.txt톰캣 로그 파일이 아주 커졌고, 지금도 로깅이 되고 있을 때 로그 파일 크기를 0으로 만들고 싶고 로깅도 계속 되도록 하려면?> catalina.out  입력 리디렉션파일의 내용을 입력으로 사용한다 wc -l 파일의 행 수를 출력 sort 파일의 내용을 정렬하여 보여준다

OS/Linux 2024.08.27

Java > Concurrency > 2. Thread 생성, 실행

Thread 생성https://github.com/venzersiz/learn-java8/blob/master/src/test/java/concurrency/basic/MakingThreadTest.java Thread 클래스를 상속받거나 Runnable 인터페이스를 구현하는 방법이 있다 Thread 객체의 기능을 확장할 때를 제외하곤 Runnable 인터페이스를 사용하는 것이 여러모로 좋다 run() 메서드를 오버라이딩해야 한다  Thread 실행https://github.com/venzersiz/learn-java8/blob/master/src/test/java/concurrency/basic/MakingThreadTest.javahttps://github.com/venzersiz/learn-java..

Java/Concurrency 2024.08.23

Spring Security > 사용자 테이블만 사용하는 애플리케이션에 체계적인 역할 기능을 추가해보자

현 상태user 테이블이 있다 권한 칼럼도 가지고 있다 사용자의 접근 권한 확인을 user 테이블에서 사용자 정보를 조회 후 권한 칼럼을 기준으로 관리자인지 아닌지를 코드에서 분기원하는 바user_authority 테이블을 만들어 사용자와 권한의 관계를 1:N으로 만들어 한 사용자가 여러 권한을 가지게 할 수도 있겠지만, 여기서는 간단히 세부적인 권한이 아닌 역할로 관리하며 1:1 관계를 유지하고, user 테이블을 그대로 사용하기로 한다  사용자 역할 클래스 생성@RequiredArgsConstructor@Getterpublic enum UserRole { ADMIN(FullName.ADMIN), SUPER_ADMIN(FullName.SUPER_ADMIN); private final S..