C#.NET Q&A

멀티코어링? 멀티스레딩? 질문입니다. 왕초보자 평점: 없음 조회: 240
제가 이해한것을 먼저 말씀드리면, 일단 visualStrudio로 프로젝트 생성해서 프로그램을 실행시키게 되면 .exe파일이 하나의 프로세스 가 되는 것이고 이 프로세스안에 스레드를 100개든,1000개든 만들면 하나의 프로세스에서 각 스레드가 문맥전환이 일어나며 각각 개별 동작을 하는 것으로 알고 있습니다. 하드웨어적으로 보면 결국 CPU코어가 몇개든, 하드웨어스레드가 몇개든 1코어,1스레드만 사용하게 되는 것이죠.

그래서 하나의 프로그램(exe파일)에서 하드웨어 스레드를 2개 혹은 3개씩 쓸 수 있는 방법을 열심히 찾아봤습니다.
답은 내가 사용하고 있는 Thread에서 ProcessorAffinity를 설정하든지, IdealProcessor를 설정하든지 해주면 되는 것이라고 하더군요.

그런데 IdealProcessor를 설정하였더니 ProcessExplorer에서 IdealProcessor가 바뀐것은 확인되었는데.
각 스레드별로 Process.GetCurrentProcess().Id를 콘솔에서 출력해봤더니 같은 Id가 나오네요. 
스레드별로 IdealProcessor를 다르게 설정해주었는데 어째서 Id는 같은가요?
IdealProcessor와 Process.GetCurrentProcess().Id의 차이는 무엇인가요?

아래는 제가 테스트해본 소스입니다.
using System;
using System.Threading;
using System.Diagnostics;
using System.Threading.Tasks;

namespace ProcessorAffinity
{
    class Program
    {
        static void Main(string[] args)
        {
            Process Proc = Process.GetCurrentProcess();
            long AffinityMask = (long)Proc.ProcessorAffinity;
            AffinityMask &= 0x000F; // use only any of the first 4 available processors
            Proc.ProcessorAffinity = (IntPtr)AffinityMask;

            Thread t1 = new Thread(Task1Process);
            t1.Start();

            Thread t2 = new Thread(Task2Process);
            t2.Start();
        }


        static void Task1Process()
        {
            int mythreadid = Thread.CurrentThread.ManagedThreadId;
            Process proc = Process.GetCurrentProcess();
            proc.Threads[mythreadid].ProcessorAffinity = (IntPtr)2;

            
            while (true)
            {
                Process modifyproc = Process.GetCurrentProcess();
                Console.WriteLine("나는 1번 스레드이고 아이디는 {0}번, 프로세스 아이디는 {1}", proc.Threads[mythreadid].Id, modifyproc.Id);
                Task.Delay(2000).Wait();
            }
            //Process Id = Process.GetCurrentProcess().Threads;
        }

        static void Task2Process()
        {
            int mythreadid = Thread.CurrentThread.ManagedThreadId;
            Process proc = Process.GetCurrentProcess();
            proc.Threads[mythreadid].ProcessorAffinity = (IntPtr)4;

            

            while (true)
            {
                Process modifyproc = Process.GetCurrentProcess();
                Console.WriteLine("나는 2번 스레드이고 아이디는 {0}번, 프로세스 아이디는 {1}", proc.Threads[mythreadid].Id, modifyproc.Id);
                Task.Delay(2000).Wait();
            }
        }

    }
}
태그 : 스레드 c#
작성자 정보
왕초보자
Level 13
 [EXP.34/40]

메일:  비공개
글등록 +12 144 덧글등록 +3 24
자기소개
안녕하세요.
글 공유하기 |
  tweet facebook
2019-03-12 오후 5:07:01
나도한마디
사용자
지후니파파            [2019-03-13]
Level 33
 [EXP.63/80]
GetCurrentProcess().Id 는 작업 관리자에서 PID나오는거 아닌가요? 한 프로그램에서 PID가 두개가 될수 없습니다.
그리고 글을보면 하드웨어 쓰레드를 여러개 이용하는 방법을 찾으려고하시는거 같은데
S/W 가능한지 불가능해 보이는데 (개인적인 의견입니다.) 그리고 개발자가 하드웨어 쓰레드를 왜 신경쓰는지?
자원안에서 멀티쓰레드를 쓰는 방법도 있는데.. 그걸로도 해결이 안되는 프로그램이 있나요?
그럼 하드웨어 성능을 높혀야죠.
사용자
왕초보자            [2019-03-13]
Level 13
 [EXP.34/40]
저희가 쓰는 장비가 있는데 그 장비의 DLL이 하나의 프로세스에서 2개의 장비를 동시에 컨트롤 안되게 되어 있는 것 같습니다.

그래서 2개를 동시에 컨트롤 하기 위해, 프로세서를 분리시키서 운용하려고 하는겁니다.

단순히 스레드를 여러개로 만들면 스레드만 여러개가 생기지 프로세서는 하나만 쓰니깐요.

지금 해보니 프로세서 분리하니깐 잘되네요
태그로 엮인글
[C#.NET Q&A] Visual studio 같은 창분리 및 배치하는 UI 만들기 가능한가요? [2]  오마르
[구인&교육정보] [ 기흥 ] C# 생산관리 시스템 [ 개발 / 중급 ]  한국정보데이터시스
[구인&교육정보] [마곡] C#, .NET WPF(필) 병원 공통,유지보수사업 초급or중급 (즉시~연단위)  유진인포텍
[구인&교육정보] 완료 - [상암] C# 닷넷(.Net) 프로그램 수정(고급)  킴스필
[C#.NET Q&A] ToolStripButton CheckOnClick  고수도초보부터
[C#.NET Q&A] 컨트롤 동작 순서를 결정할 수 있을까요?[1]+2  진화가필요해
[C#.NET Q&A] [초보질문]C#을 이용해서 BOM을 구성할때[1]+3  강화5연대
[C#.NET Q&A] 윈폼 그리드뷰, 버튼 등의 속성 값 적용 시[1]  캘거리
[구인&교육정보] 2019년 로버스트자산운용 시스템개발팀 채용공고  daniel
[구인&교육정보] [안산] 제조관리) C# 초급/중급 운영자 모집(즉시)  인텍솔루션(주)
글리스트
윈폼 그리드뷰, 버튼 등의 속성 값 적용 시[1]  캘거리
C# 통신의Receive에 관한 질문이 있습니다.[2]  프린이
스트링 작업도움바랍니다[1]  엿장수
윈폼에서 이미지 메타데이터 읽기  jjin96
윈폼에서 쪽지기능 구현방법에 대해 질문드립니다.[2]+3  ofone
.NET Web API 서버 호출 시 DateTime 파라미터 값이 API 에서 변경 됩니다.[1]+1  애기곰
c#에서 spread cell에서 물어볼께 있습니다...  바밤바
C# 서버 질문드립니다![2]+2  코딩아비
프로시져 두번호출 관련문의....[2]  닷지
C# 프로그램과 카카오톡 간 오류[2]  ejqkfmrp
 ★현재글->   멀티코어링? 멀티스레딩? 질문입니다.[1]+1  왕초보자
C# 폴더생성 문제[4]  훈쓰쓰훈
C# 윈폼으로 개발된 앱에 pg사의 결제모듈을 붙일 수 있는 방법이 있을까요?[1]+1  ofone
C# 윈폼 - 일정하지 않은 시간에 따른 데이터 처리에 관하여 질문합니다.[1]+1  프린이
TreeView 만드는데 있어서 조언 좀 구하고자 합니다..[1]+1  악마성
c# webbrowser 첫 페이지만 로딩이 느린이유??  penmouse
윈폼 Datagridview 에서 엑박(redbox) 나는 이유가 뭘까요... [2]+2  밍님
웹폼 텍스트박스에서 TextMode에서 Password에 값넣기  비베씨샾
pcm 데이타를 플레이시키려면 어떻게하면되나요?[1]  엿장수
delegate event 사용 방법에 대해 질문드립니다.[1]  개발초보초보
foreach 문을 for 문으로 변경하고 싶습니다.[1]  insurang