2022년 3월 2일 수요일

[c# Thread]

 using System;

using System.Threading;
using System.Threading.Tasks;

namespace ServerCore
{
    class Program
    {

        static void MainThread(object state)
        {
            for (int i=0;i<5;i++)
                Console.WriteLine("Hellow Thread!");
        }

        static void Main(string[] args)
        {
           
            ///결론 왠만하면 threadPool을 사용하고
            ///아니면 Task를 사용하면된다!
            ///Thread new는 거의 사용하지 않는다!!




            ///단기알바형식
            ///백그라운드 = true
            ///다시 돌아오지 않는 thread를 넣으면 통째로 먹통이 될수있다...
            ThreadPool.SetMinThreads(1, 1);
            ThreadPool.SetMaxThreads(5, 5);


            for (int i = 0; i < 5; i++)
            {
                ///직원이 사용할 일감을 정한다는 느낌
                //Task t = new Task(() => { while (true) { } }, TaskCreationOptions.LongRunning);
                ///TaskCreationOptions.LongRunning 오래 걸릴꺼라는 것을 알려줘서 별도 처리하게 만들기
                ///

                ///만약 롱러닝테스크 설정을 안해주면 똑같이 ThreadPool이 먹통이 된다.
                Task t = new Task(() => { while (true) { } });
                t.Start();
            }

            /*///영영 돌아올수 없는 일감을 맥스치만큼 준다... 에러가 발생함!(먹통예상)
            for (int i = 0; i < 5; i++)
                ThreadPool.QueueUserWorkItem((obj) => { while (true) { } });*/


            ///정확히 먹통이 안됨!
            ThreadPool.QueueUserWorkItem(MainThread);
           



            /*Thread t = new Thread(MainThread); ///너무 무겁다 정직원이다
            t.Name = "TestThread";
            t.IsBackground = true; ///백그라운드로 돌리면 메인이 떨어지면 같이 떨어진다!!
            t.Start();
            Console.WriteLine("Waiting for Thread");
            t.Join(); ///이 thread가 종료되지 않으면 밑에 것이 실행되지 않는다

            Console.WriteLine("Hello World!");*/

            while (true)
            {

            }
        }
    }
}

댓글 없음:

댓글 쓰기

git rejected error(feat. cherry-pick)

 문제 아무 생각 없이 pull을 받지않고 로컬에서 작업! 커밋, 푸시 진행을 해버렷다. push에선 remote와 다르니 당연히 pull을 진행해라고 하지만 로컬에서 작업한 내용을 백업하지 않고 진행하기에는 부담스럽다(로컬작업 유실 가능성) 해결하려...