본문 바로가기

Kotlin/8. Thread

(8)
8.7 Thread Context Switching / Legacy Thread Thread Context Switching 번갈아 반복하며 Thread를 처리하는 과정에서 많은 오버헤드가 발생하는 것 Thread의 대표적 단점 Legacy Thread의 특징 Thread는 가상머신이 설치된 OS를 기반으로 동작 많은 요청을 처리하려면 Thread의 증가가 필수적이나 OS Thread를 무한정 늘릴 수 없어 보통 Thread Pool을 만들어 사용 기본적을 Blocking을 사용하므로 Non-Blocking(Reactive Programming)에 대한 대처 부족
8.6 Priority Priority val threadPriority = Thread() threadPriority.setPriority(1) 모든 Thread는 우선순위를 가진다. 쓰레드를 생성하면 기본적으로 NORM_PRIORITY = 5 를 갖는다. 1~10까지 존재 / MIN_PRIORITY = 1, MAX_PRIORITY = 10
8.5 Thread Synchronization Thread Synchronization 다중 Thread 환경에서 한 Thread가 공유자원을 사용하는 도중에 다른 Thread가 접근해서 자원을 쓰려는 것을 막는 것 동시성 문제: 위에 상황에서 발생하는 문제 임계 영역: 동시성 문제가 발생 할 수 있는 자원 종류 Mutex Synchronized Semaphore Mutex lock / unlock을 통해서 임계 영역에 접근을 막는 방법 Thread 대기는 Queue를 사용하여 관리 lock을 건 Thread가 lock을 해제 해야함 lock 현재의 임계 구역에 들어갈 권한을 획득 다른 스레드가 임계 영역을 사용중이면 종료할 때까지 대기 unlock 현재의 임계 영역을 다 사용했음을 통지 대기중인 Thread가 임계 영역에 진입 가능 Synchron..
8.4 Join / Interrupt Join val thread2 = thread(start = true){ println("Thread2 run") } thread2.join() Thread가 종료될 때 까지 기다릴 때 사용 다른 쓰레드가 만든 결과물을 얻고자 할 때 사용 ex) 네트워크에서 데이터 취합, 연산 결과를 모을 때 Interrupt Thread가 일시 정지 상태에 있을 때 InterruptedException 예외를 발생시키는 역할 다른 쓰레드를 종료 할 때 사용 함수 isInterrupted() Thread.interrupted()
8.3 Thread 만드는 방법(2) Thread Pool 미리 Thread를 만들어 놓아서 재사용하는 것 ExcutorService newFixedThreadPool(n: Int) n개의 Thread 생성할 때 사용 newCachedThreadPool() Thread를 필요하다면 계속 생성하는 경우에 사용 newScheduledThreadPool(int) 주기적으로 실행되어야 하는 Thread가 필요할 때 사용 newSingleThreadExecutor() 하나의 Thread만으로 작업해야 할 때 사용 함수 execute() 리턴 타입이 존재 하지 않는다 submit() 리턴 타입이 존재 할 때 invokeAny() 리턴을 collection으로 하나 성공한 task 하나에 대해서만 값을 리턴 invokeAll() 성공한 모든 Task에 ..
8.2 Thread 만드는 방법(1) Thread 상속 class ThreadEx : Thread(){ override fun run() { println("Thread run") } } fun main() { val thread1 = ThreadEx() thread1.start() } Thread 클래스를 상속받고 run()에 구현 Runnable 인터페이스 class ThreadEx : Runnable{ override fun run() { println("Thread run") } } fun main() { val thread1 = Thread(ThreadEx()) thread1.start() } 상위 클래스를 Thread로 할 수 없을 경우 Callable 인터페이스 class ThreadEx : Callable{ override f..
8.1 Thread란 Process 컴퓨터에서 연속적으로 실행되고 있는 프로그램 Program은 저장 매체에 존재하는 실행 파일을 의미 그것이 실행 된 것이 Process 여러개의 프로세스가 실행 되는 것을 멀티태스킹이라고 한다 자신만의 독립적인 메모리 공간이 있음 -> 서로 간의 데이터 공유가 까다로움 Multi-Process : 여러개의 프로세스가 실행되는 것 한 개 이상의 쓰레드를 가질 수 있음 Process 관리 RunTime 클래스를 사용해서 관리 가능 함수 프로세스 생성: exec() 종료될 때 까지 기다림 : waitFor() 종료 시키기: destroy() Concurrency(동시성) 시분할 각 Thread 마다 동일한 시간을 할당하여 교대로 실행 각 Task가 실행되는 시간을 모두 합한 시간만큼 소요 병렬 ..
8. Thread 8.Thread Thread란 Thread 상속 Runnable Callable Thread pool Thread State Join Interrupt Thread Synchronization 우선순위 Context Switchings