UD_park's IT story
[C#] Thread의 기본 개념과 사용법 본문
[이 포스팅은
시작하세요! C# 7.1 프로그래밍의
내용을 발췌하였습니다]
[보기용 예제 소스 코드에서 오류 발생시에
댓글이나 방명록에 글을 남겨 주시면 수정/보완하겠습니다]
이번 포스팅은 C#뿐 아니라 Java, C++ 등등
다양한 언어에서 모두 쓰이며 실무에서도 정말
많이 사용되는 Thread의 기본 개념과 사용법에
대해서 포스팅을 해보도록 하겠습니다
일단 정의부터 하겠습니다
스레드(Thread)란
명령어를 실행하기 위한 스케줄링 단위,
프로세스 내부에서 생성할 수 있다
이는 운영체제에서 멀티 스레딩을 지원한다면
하나의 프로세스가 여러 개의
스레드 자원을 가질 수 있음을 의미한다
그렇기 때문에 이번에도 역시나 저만의
방식으로 쉽게 풀어 이해하고
설명해보겠습니다
일단 프로세스를 사람이라고 가정하겠습니다
그리고 그 프로세스라는 사람은
택배 상차를 하는 사람이라고 가정하겠습니다
컨베이어 벨트를 따라 택배 상자가 쭈욱
밀려 들어오게 됩니다
택배 상자는 프로세스가 처리해야하는
업무, 작업을 의미합니다
이렇게 컨베이어 벨트를 따라 들어온
작업인 택배 상자를 프로세스라는 사람은
하나 하나씩 분류해서 차곡 차곡
택배 트럭에 쌓아 올립니다
이 작업을 프로세스가
작업, 업무를 완료하고 데이터에 저장하는
과정이라고 가정합니다
사람은 팔이 2개 입니다
즉, 동시에 택배 상자를 들어 올리는 것과
쌓아올리는 일을 할 수 없다는 것입니다
그런데 만약 팔이 6개, 8개라면
어떨까요? 택배 상자를 집어 드는것과
차곡 차곡 쌓아 올리는 일을 동시에
진행할 수 있기 때문에 훨씬 더
일의 진행 속도가 빠를것입니다
이렇게 팔 2개당 한 박스의
작업을 수행하는데
바로 이 팔들을 스레드라고
생각하시면 될 것 같습니다
그럼 이제 스레드의 사용법에 대해서
알아보도록 하겠습니다
일단 스레드를 사용하는
간단한 예제 코드를 보면서
설명을 하겠습니다
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading; using System.Threading.Tasks; namespace ThreadExample { class Program { static void Main(string[] args) { Thread thread1 = new Thread(() => { for (int i = 0; i < 10; i++) { Console.WriteLine("A"); } }); Thread thread2 = new Thread(() => { for (int i = 0; i < 10; i++) { Console.WriteLine("B"); } }); thread1.Start(); thread2.Start(); } } }
스레드를 사용하기 위해선 5, 6번 코드같이
using으로 선언을 해주어야 합니다
그리고 스레드의 생성하는 부분이
바로 14번 21번 코드 줄입니다
스레드는 만들기만 하면 동작을
하지않기에 28, 29번 줄처럼
시작을 해줘야 작동을 합니다
이렇게 코드를 작성하고 나면
아래의 결과와 같이 출력이 됩니다
아까의 표현을 빗대어 설명하자면
A가 택배 상자를 들어올리는 일,
B가 택배 상자를 쌓아올리는 일이라고
가정을 한다면
팔이 4개라서 들어 올리는 일과
쌓아올리는 일을 동시에 진행하고
있습니다
한 가지 더 알려드리자면
위 사진과 같은 출력 결과는
항상 같은 결과가 나오지 않습니다
그 이유는 A, B 두 개의 작업이
동시에 이뤄지기 때문에
아주 근소한 차이로 먼저 출력되어
나오는 값이 그때 그때 디버깅할 때마다
차이나기 때문입니다
마지막으로 다른 방법으로 스레드를
사용하는 소스 코드를 소개하겠습니다
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading; using System.Threading.Tasks; namespace ThreadExample { class Program { static void ThreadA() { for (int i = 0; i < 10; i++) { Console.WriteLine("A"); } } static void ThreadB() { for (int i = 0; i < 10; i++) { Console.WriteLine("B"); } } static void Main(string[] args) { Thread thread1 = new Thread(ThreadA); Thread thread2 = new Thread(ThreadB); thread1.Start(); thread2.Start(); } } }
위와 같은 소스로도
첫 번째로 보여드린 소스처럼
똑같이 결과가 출력이 됩니다
그럼 스레드에 대한 기본 개념과
사용법의 포스팅을 마치도록 하겠습니다
스레드에 대한 다른 사용법에 대해서는
이후에 포스팅으로 다루도록 하겠습니다
혹시 다른것에 대해 궁금하신게
있으시다면
댓글에 달아주세요
아는것이면 친절하게 쉽게
모르는것이면 또 제가 알아내서
친절하게 쉽게 포스팅해서
설명해드리겠습니다
'IT - Language > C#' 카테고리의 다른 글
[C#] DataBase 연결 원리와 방법에 대한 설명 (2) | 2018.07.04 |
---|---|
[C#] 컴퓨터 IP 출력하기(feat.DNS에 대한 개념과 설명) (0) | 2018.07.02 |
[C#] 선택문(switch) 개념 및 사용법[1 - 3] (0) | 2018.06.26 |
[C#] 선택문(if) 개념 및 사용법[1 - 2] (0) | 2018.06.26 |
[C#] 배열/다차원 배열(feat.가변배열)의 기본 개념과 사용법 (0) | 2018.06.26 |