thread 8

#080_닷넷(.NET)_.Net Framework 기본 - Thread Pool &TPL

안녕하세요 삽잡이입니다. 쓰레드 풀은 간단하게, 쓰레드의 모임 공간입니다. 어떤 작업이 무수히 많이 들어올 때각각 작업을 모두 쓰레드 하나씩 독립적으로 수행한다고 해봅시다.들어오는 작업마다 쓰레드를 띄워주면 얼마나 비효율적이겠습니까? 무조건 쓰레드를 띄워버리면 배보다 배꼽이 더 커지게 되버리죠.왜냐하면, 쓰레드를 관리하는 리소스 뿐만 아니라, 스케쥴링 비용까지 들기 때문에 무조건 쓰레드를 띄우지 않는게 좋다 이겁니다.따라서, 쓰레드 풀이라는 것을 만들게 된 것입니다. 예를 들어,쓰레드를 3개만 만들어 두고 풀에 집어넣었다가,작업이 들어오게되면 풀에 있던 쓰레드가 처리를 하게 만드는 것입니다. 즉, 쓰레드를 3개까지만 만들어두는 것입니다.작업이 끝나게 되면 풀에 들어가고,또 작업이 오면 수행하고 이렇게 말..

#079_닷넷(.NET)_.Net Framework 기본 - Thread 생성 & 동기화

안녕하세요 삽잡이입니다. 이전 시간까지 비동기 대리자를 통해서우리가 제어할 수 없는... 쓰레드를 경험해봤습니다.그런데, 이번에는 사용자가 실제로 쓰레드를 생성해보는 시간을 가져보려고합니다. 닷넷에서 제공해주는 Threading 네임 스페이스는 멀티스레드 응용 프로그램을 직접 만들 수 있게 해주는 다양한 타입을 제공해줍니다. 몇가지 특성에 대해서 간략하게 알아보자면,Interlocked 라는 타입은 원자적인 연산을 지원해줍니다.그리고 Monitor가 있는데,해당 타입이 가장 많이 동기화를 수행할 때 사용하는 타입입니다. Threading 네임 스페이스 중에서도,Thread 클래스에서는 Sleep 메서드를 많이 사용합니다.이는 정적 메서드지요. 그리고 인스턴스 수준에서는 IsBackground 인스턴스를 ..

#078_닷넷(.NET)_.Net Framework 기본 - 비동기 대리자(delegate) & 멀티 쓰레드(Multi Thread)

안녕하세요 삽잡이입니다. 이번 시간은 아마 매우 어려운 시간이 될 수도 있을 것 같습니다.이해가 안가시더라도 천천히 여러번 읽어보시고... 제가 잘못되게 서술했을 수는 있으나...(-_-;;)어떠한 느낌인지를 느껴보시길 바랍니다... 쓰레드는 OS의 자원입니다.그런데, 이 쓰레드에 대해서 공부를 하고자할 때 띄우고, 동기화 제어하는 것이 어렵다면 어려운 부분입니다.이를 쓰레드의 동시성 문제라고 합니다. 쓰레드의 동시성 문제에 관련되어 '휘발성', '원자적'이라는 단어는 중요한 용어가 됩니다. 해당 용어들이 주가되어 쓰레드 동시성에 문제가 생기게 될 수 있습니다.그러면 하나씩 살펴보도록 하겠습니다. 'volatile'을 우리말로 휘발성이라고 합니다. 여러 쓰레드가 접근하는 코드의 경우를 생각해보시길 바랍니..

#075_닷넷(.NET)_.Net Framework 기본 - 메모리상 Thread 기본 구조

안녕하세요 삽잡이입니다. 이전에 쓰레드에 대해서 알아본 적이 있습니다.간단하게 다시 요약해보죠.모든 응용 프로그램의 진입점은 Primary Thread에 의해서 실행됩니다.따라서, 쓰레드는 프로세스 내의 실행 경로라고 부를 수 있지요. 독립적으로 움직이는 쓰레드들은메모리 관점에서 볼 때 핵심적으로 두가지의 메모리를 갖습니다.바로, TLS와 Stack을 소유할 수 있는 것입니다.또한, Heap 영역과 Global Data영역을 공유하지요. 닷넷에서는 프로세스와 쓰레드를 다루기 편하도록 타입을 만들어놨습니다.Process 타입의 속성에는 크게,'Handle, Id, Moudle, Threads' 가 있습니다.말 그대로 핸들을 반환하거나,프로세스의 PID, module, Thread들을 반환할 수 있는 속성들..

#021_WIndow_System_쓰레드 동기화

안녕하세요 삽잡이입니다. 지난 시간에 멀티 쓰레드들이 공유 메모리를 접근할 때발생하는 문제점을 어떻게 해결할지에 대해서 생각해보는 시간을 가졌었습니다. 이번 시간에는 동기화에 대해서 알아보도록 하겠습니다.지난시간의 예시를 잠깐 살펴보도록 하겠습니다. 다수의 쓰레드가 있을 때 A라는 쓰레드는 Write 중이고,다른 쓰레드들이 Read 중이라고 가정해보겠습니다. 이때 공유하고 있던 메모리가 수정이 되는 일이 발생함으로, 쓰레드들은 자신이 모르는 사이에 데이터가 변경됨으로 혼란이 옵니다.따라서 Memory Fault가 발생되는데,이를 해결하기 위해 서로 데이터가 호환 가능하도록 해야합니다.이를 우리는 동기화라고 부르게 되는 것입니다.쓰레드에서는 공유 변수, 공유 메모리, 공유 데이터에 대한 동기화 부분이 가장..

#020_WIndow_System_멀티 쓰레드 공유 메모리

안녕하세요 삽잡이입니다.이번 시간에는 쓰레드 동기화에 대해서 알아보려고 합니다. 쓰레드는 각각 독립적으로 움직이기 때문에, 공유 변수에 더욱 주의를 해야합니다.그렇지 않으면 쓰레드에 정말로 많은 문제가 발생하게 됩니다.공유 메모리에 신경쓰지 않게 되어 발생한 오류는동기화와 관련된 문제로써 에러를 찾기 상대적으로 힘들어집니다. 여러개의 독립적인 쓰레드가 하나의 공유 메모리를 사용할 경우를 생각해보겠습니다.만약, 0번째 쓰레드가 Write 중인데 나머지 쓰레드들은 Read를 하고 있다면,메모리가 변경이 되는 것인데, Read를 하던 녀석들은 당황하겠지요...결과적으로 Memory Fault가 발생하는데, 이 문제는 심각한 문제입니다. 강조하지만, 원천적으로 공유 메모리는 쓰레드에서는 문제가 많습니다.하지만,..

#019_WIndow_System_쓰레드(thread) 제어

안녕하세요 삽잡이입니다.이번시간에는 지난 시간에 이어서 쓰레드에 대해 알아보려고합니다. 이전 시간까지 쓰레드를 생성할 때에는 CreateThread() 함수를 실행했습니다. 그런데 이 CreateThread 함수는 API에서 제공하는 함수입니다. Thread를 띄우는 함수에는 위의 함수 외에 _beginthread()함수가 있습니다.둘이 차이는 없지만, 일반적으로 _beginthread()함수를 더 많이 사용한다고 합니다. (믿거나 말거나) CreateThread는 다시 말하지만, API함수입니다.thread는 stack을 제외한 Global Data 영역과 heap 영역을 공유합니다.즉, thread는 static 변수의 내용을 공유한다는 것입니다.그런데 C언어의 런타임 라이브러리를 사용할 때 문제가 ..

#018_WIndow_System_쓰레드(thread) 란?

안녕하세요 삽잡이입니다.이번 시간에는 시스템 프로그래밍을 배우면서 가장 중요한 내용 중 하나!쓰레드에 대해서 알아보도록 하겠습니다. 요즘은 멀티코어 시대로써 여러개의 코어... 그러니까 CPU 자세하게는 연산 장치를 통해 프로그래밍을 할 수 있게 되었습니다. 우선 프로그램이 실행되기 위한 세가지 상태에 대해 알아보도록 하겠습니다.1. Running 상태2. Ready 상태3. Blocking 상태 start를Ready전에, End를 Blocking 후에 실행되게 됩니다.즉, 상태로는 크게 프로그램이 구동되고 실행되는 위의 세가지 상태로 나뉘게 된다는 것입니다. 프로그램이 실행되면 Ready 상태에 놓이게 됩니다.그리고 자기가 실행할 순서가 되면 Running 상태에 놓이게 됩니다.Running 상태에 놓..