2024. 7. 26. 00:24ㆍC#
안녕하세요. 진득 코딩입니다. 이번 시간에는 많은 개발을 배우시는 분들을 좌절시키고 필자 또한 좌절하고 있는 멀티 스레드에 대해서 살펴보도록 하겠습니다.
멀티 스레드에 대해서 살펴보기 전에 스레드에 대해서 먼저 살펴보도록 하겠습니다. 스레드는 CPU가 일하는 단위의 최소 단위로서 하나의 프로세스가 최소 하나의 스레드를 가지게 되며 하나의 프로세스가 여러 개의 스레드를 갖는 것이 가능합니다.
프로세스 안에는 기본적으로 Heap, static, code 영역이 있으며 각각의 스레드는 registers와 stack을 가지고 있습니다.
스레드는 싱글 스레드와 멀티 스레드로 구분되는데 싱글 스레드는 순차 실행하는 반면에 멀티 스레드는 여러 스레드가 병렬 실행하는 특징을 가지고 있습니다.
하나의 프로세스에서 여러 개의 스레드를 만들게 되면 OS가 실행 순서를 정하게 됩니다. 이 실행 순서는 OS만 알고 있고 그냥 자기 마음대로 실행하게 됩니다. 하지만 사람의 입장에서는 너무 빠른 속도로 컨텍스트 스위칭을 하기 때문에 거의 동시에 실행되는걸로 느끼게 됩니다.
스레드를 사용해봅시다. 스레드를 사용하기 위해서는 일단 System.Threading을 선언하고 new로 스레드를 생성하고 그 안에 ThreadStart를 또 한번 new해줍니다.
위에서 언급했듯이 멀티 스레드를 하게 되면 컨텍스트 스위칭이 일어나게 되기 때문에 어떤 스레드가 먼저 실행될지 모릅니다. 이때 lock을 사용하게 되면 lock안에 있는 코드들은 무조건 실행하고 다른 일을 하게 됩니다.
서브 스레드를 사용할 때에는 ui와 관련된 작업을 할 때 오류가 날 수 있습니다. 이는 ui는 메인 스레드에서 관리하기 때문입니다. 따라서 winForm에서는 invoke를 사용해야 합니다.
이번 시간에는 멀티 스레드에 대해서 살펴보았습니다. CPU가 일하는 최소 단위로서 굉장히 중요한 개념이기 때문에 잘 살펴보고 넘어가야 합니다. 다음 시간에는 멀티스레드를 이용한 실습에 대한 포스팅으로 돌아오도록 하겠습니다. 이번 시간은 여기까지입니다. 끝까지 봐주셔서 감사합니다.😀
'C#' 카테고리의 다른 글
[C#] 대리자와 이벤트에 대해서 살펴보자 (0) | 2024.07.26 |
---|---|
[C#] 멀티스레드를 이용하여 레이스 프로그램을 만들어보자 (2) | 2024.07.26 |
[C#] 제네릭 컬렉션으로 빠르고 안정적이게 데이터를 다뤄보자 (0) | 2024.07.26 |
[C#] 데이터 집합을 다루는 컬렉션을 알아보자 (0) | 2024.07.25 |
[C#] try-catch로 예외 처리하는 법을 알아보자 (0) | 2024.07.23 |