일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- Stack
- MSA
- JPA
- 스프링
- thread
- mysql
- Collection
- jvm
- 백준
- SpringBoot
- spring
- OS
- 토비의 스프링 정리
- K8s
- Stream
- list
- 자바 ORM 표준 JPA 프로그래밍
- Kotlin
- 이스티오
- 스트림
- 토비의 스프링
- Real MySQL
- 쿠버네티스
- gradle
- 보조스트림
- IntellJ
- redis
- Java
- 자바
- GC
- Today
- Total
목록thread (6)
인생을 코딩하다.
커널 수준의 쓰레드 쓰레드 패키지를 운영체제에서 관리한다. 각 응용 프로그램들은 운영체제에 영향을 많이 받게 되므로 이식성이 낮다. 사용자 수준의 쓰레드 쓰레드 패키지를 사용자 영역에 두고 운영체제 커널은 단일 프로세스만을 관리한다. 쓰레드 패키지를 런타임 시스템에서 운영한다. 운영체제 입장에서는 런타임 시스템도 하나의 프로세스로 인식한다. 쓰레드를 운영하지 않는 운영체제제에서 실행할 수 있으므로 이식성이 뛰어나다. 쓰레드 운영 방식 @커널 수준의 쓰레드 @사용자 수준의 쓰레드 커널 개입이 크다. 커널 개입이 작다. 런 타임 시스템이 필요 없고 커널이 직접 한다. 런 타임 시스템이 필요하다. 속도가 느리다. 속도가 빠르다. 문맥 교환이 많다. 문맥 교환이 적다. 독자적 알고리즘이 필요없다. 독자적 알고리..
Fork Join Pool의 상속구조 java.lang.Object java.util.concurrent.AbstractExecutorService java.util.concurrent.ForkJoinPool Fork Join Pool 이란? ForkJoinPool 은 Java7부터 사용가능한 Java Concurrency 툴이며, 동일한 작업을 여러개의 Sub Task로 분리(Fork)하여 각각 처리하고, 이를 최종적으로 합쳐서(Join) 결과를 만들어내는 방식이다. 위의 그림과 같이 Fork를 통해서 업무를 분담하고 Join을 통해서 업무를 취합한다. 더 자세하게 아래 그림을 보자. 하나의 작업 큐를 가지고 있으며, 이러한 작업들을 Fork Join Pool에서 관리하는 여러 스레드에서 접근하여 작업..
ThreadLocal Oracla Docs에서는 ThreadLocal 클래스를 다음과 같이 설명한다. ThreadLocal 클래스는 thread-local 변수들을 제공한다. 이 변수들은 get 또는 set 메소드를 통해 접근하는 각 스레드가 독립적으로 변수의 초기화 된 사본을 가지고 있다는 점에서 다르다. ThreadLocal 인스턴스들은 보통 스레드와 상태를 연결하려고 하는 클래스들의 private static 필드들이다. (예를들어, 유저 ID 또는 트랜잭션 ID) 일반 변수의 수명은 특정 코드 블록(예, 메서드 범위, for 블록 범위 등) 범위 내에서만 유효하다. { int a = 10; ... // 블록 내에서 a 변수 사용 가능 } // 변수 a는 위 코드 블록이 끝나면 더 이상 유효하지 않..
volatile volatile란? volatile 키워드는 java 변수를 Main Memory에 저장하겠다 라는 것을 명시한다. 매번 변수의 값을 읽을 때마다 CPU cache에 저장된 값이 아닌 Main Memory에서 읽는 것이다. 또한 변수의 값을 쓸 때마다 Main Memory까지 작성한다. volatile를 쓰지 않았을 때, non-volatile일때의 문제점 멀티쓰레드 어플리케이션에서의 non-volatile 변수에 대한 작업은 성능상의 이유로 CPU 캐시를 이용한다. 둘 이상의 CPU가 탑제된 컴퓨터에서 어플리케이션을 실행한다면, 각 쓰레드는 변수를 각 CPU의 캐시로 복사하여 읽어들인다. non-volatile 변수에 대한 작업은 JVM 이 메인 메모리로부터 CPU 캐시로 변수를 읽어들..
Multi-thread 프로그래밍 동시에 여러 개의 Thread가 수행되는 프로그래밍 Thread는 각각의 작업공간 (context)를 가짐 공유 자원이 있는 경우 race condition이 발생 critical section에 대한 동기화(synchronization)의 구현이 필요 쓰레드들이 공유하는 자원 = 쉐어드 리소스 이런 자원의 영역을 critical section 이라고 한다. 이 critical section을 2개의 쓰레드가 접근하게 되었을 때, 만약 critical section 에서 어떤값을 가져와서 더하고 뺀다라고 하면 나중에 더해서 오버라이드 한 값이 무시가 될 수 있다. 그래서 더한 다음에 빼야한다. 결국엔 이런 영역에 관해 순서를 지켜주자는게 동기화다. 이 critical s..
Process 실행중인 프로그램 OS으로부터 메모리를 할당 받음 Thread 실제 프로그램이 수행되는 작업의 최소 단위 하나의 프로세스는 하나 이상의 Thread를 가지게됨 Thread는 CPU를 점유해서 돌아가게 되는데, CPU를 점유할 수 있는 것은 스케쥴러라는 것이 있다. 스케쥴러가 쓰레드의 CPU를 할당을 해서 쓰레드가 수행 되도록 역할을 한다. java 명령어를 사용하여 클래스를 실행시키는 순간 자바 프로스세가 시작되고, main() 메소드가 수행되면서 하나의 쓰 레드가 시작되는 것이다. 아무런 쓰레드를 생성하지 않아도 JVM을 관리하기 위한 여러 쓰레드가 존재한다. 예를 들면 자바의 쓰레기 객체를 청소하는 GC 관련 쓰레드가 여기에 속한다. 그런데 왜 Thread를 만들었을까? 프로세스가 하나..