Q&A

  • CPU가 2개일때 각 CPU에 프로세스 실행 할당하는 법 아시는 분?
CPU가 2개있는 경우에 a.exe는 1번째 CPU에서 실행시키고 싶고, B.exe는 2번째 CPU에 실행시키고 싶을 때 사용되는 방법을 아시는 분은 가르쳐주시기 바랍니다. ㅠ ㅠ
5  COMMENTS
  • Profile
    최남선 2003.03.22 01:32

    SetProcessAffinityMask API를 사용하시면 되여...
  • Profile
    구창민 2003.03.22 03:18

    남선님 안녕하세요 구창민입니다.

    그 함수에 대해 찾아보니 몇몇 정보가 있긴 했습니다.

    남선님이 아래처럼 사용하신 예제를 좀 올려주실 수 있나여?

    직접 해 보셨다면, 근거가 되니 믿을수도 있고,

    아래 작은 예제를 올립니다.

    즐거운 프로그래밍 하시길~~

    I have absolutely the same problem and not only with executing several
    scripts in different threads. After some digging I finaly decided that this
    is a bug of operation system (NT in my case) that is not very happy to
    manage threads with COM objects in multiprocessor architecture.
    I set the mask that allows system to execute one process using only one
    processor. I have several processes and the system split them between the
    processors, but one of them with all its threads is running on one only.

    This is a portion of Delphi code that set the mask.

    procedure SetProcessToRunOnOneProcessor;
    var
      iIndex: Integer;
      hProcess: THandle;
      iProcessAffinityMask: DWORD;
      iSystemAffinityMask: DWORD;
      iOneProcessorMask: DWORD;
    begin
      hProcess := GetCurrentProcess;
      if GetProcessAffinityMask(hProcess, iProcessAffinityMask,
    iSystemAffinityMask) then
      begin
        for iIndex := 0 to 32 - 1 do
        begin
          iOneProcessorMask := $01 shl iIndex;
          if (iProcessAffinityMask and iOneProcessorMask) <> 0 then
          begin
            iProcessAffinityMask := iProcessAffinityMask and iOneProcessorMask;
            Break;
          end;
        end;
        SetProcessAffinityMask(hProcess, iProcessAffinityMask);
      end;
    end;

  • Profile
    최남선 2003.03.22 03:49

    급하게 만들어 봤읍니다.
    작업관리자로 CPU사용내용을 확인해보세여...
    3번째 CPU만 선호도를 설정하려면 $0004,
    2번째와 3번째 CPU만 선호도를 설정하려면 $0006
    처럼 마스크로 설정하시면 돼여...

    uses Math;

    {$R *.DFM}

    procedure TForm1.Button1Click(Sender: TObject);
    var
      i: Integer;
    begin
      // 1번 CPU를 선호
      SetProcessAffinityMask(GetCurrentProcess, $0001);
      for i := 1 to 99999 do begin
        Caption := IntToStr(i);
      end;
    end;

    procedure TForm1.Button2Click(Sender: TObject);
    var
      i: Integer;
    begin
      // 2번 CPU를 선호
      SetProcessAffinityMask(GetCurrentProcess, $0002);
      for i := 1 to 99999 do begin
        Caption := IntToStr(i);
      end;
    end;
  • Profile
    김영대 2003.03.22 00:36

    // 안녕하세요 김영대(http://www.howto.pe.kr) 입니다

    아마 힘들지 않을까 합니다

    CPU 스케쥴링은 Context Switching 과 더불어 운영체제의 고유기능중에 하나이며
    이며 아마도 O/S의 CPU 프로세스 스케쥴링을 프로그래머가 특정 프로세스에게 임의
    할당하게 되면 자원공유에도 위반되며 이로인해 O/S의 프로세스 스케쥴링을 방해하여
    도리어 O/S의 성능을 떨어뜨리는 결과를 초래할 것입니다
    즉 O/S는 프로그래머가 작성한 프로그램만 신경쓰는것이 아니며 엄연히
    프로세스 또는 쓰레드에도 우선순위가 있으니까요

    UNIX의 경우도 CPU당 kernel thread인 LWP가 할당되고 여기에 user thread가
    할당되어 처리되지만 프로그래머가 직접 O/S를 수정하지 않는한
    프로그래머는 nice 등으로 우선순위를 바꾸는 정도입니다
    Windows 프로세스 생성시 우선순위(priority)를 지정할수 는 있지만
    CPU를 직접 할당하는 경우는 없는것 같습니다

    프로세스의 성능이 문제시 된다면 병렬 프로그래밍을 고려해 보세요
    SMP,MPP,NUMA 등등의 환경에서 프로그래밍 할 수 있는 라이브러리등이 제공됩니다
    LAM,MPI,OpenMP,PVM 등이 클러스터나 이와 비슷한 환경에서 쉽게 병렬 프로그래밍을
    작성할 수 있도록 공개되어 있습니다
    윈도우즈용으로 개발된것이 있는지 모리겠습니다만 JAVA로 병렬 프로그래밍을
    할 수 있도록 라이브러리가 있었던것으로 기억됩니다

  • Profile
    구창민 2003.03.22 00:45
    음훼훼

    워찌나 똑똑한지 ..

    근디 멀티 쓰레드 작업을 할때

    듀얼 시피유가 나름대로 똑똑하게 작업하던디..

    개발자가 거기 까지 신경을 써야하는 어떤 독특한 이유가 있을 거 같은디..

    그게 멀까여? 음..




    • KDDG_Drop
      2003.03.22 19:58
      안녕하세요. 주삼식입니다. 먼저, JPEG이미지를 Bitmap으로 바꾸세요. 그리고, 그 비트맵에 Canvas.Draw...
    • 최인권
    • 2003.03.22 09:33
    • 0 COMMENTS
    • /
    • 0 LIKES
    • KDDG_Drop
    • 2003.03.22 09:27
    • 1 COMMENTS
    • /
    • 0 LIKES
    • KDDG_Drop
      2003.03.25 03:32
      안녕하세요. 주삼식입니다.   역시 볼랜드 제품은 우수합니다. 결론은 제 실수였습니다.  ...
    • 장범상
    • 2003.03.22 08:29
    • 1 COMMENTS
    • /
    • 0 LIKES
    • KDDG_RNStone
      2003.03.22 18:50
      일반적인 TImage에서는 gif 형식의 파일을 로딩할 수 없습니다. TGifImage라는 컴포넌트를 함 써 보시죠...
    • 김태진
    • 2003.03.22 08:00
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 김태진
      2003.03.22 08:33
      쯔압~~~ 자료실에 Varian Async32 Components 있길래 테스트해봤는데 델파이 7.0에서 아무 문제없이 잘 ...
    • 권봉진
    • 2003.03.22 05:03
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 박장용
      2003.03.22 06:41
      ...
    • 권봉진
      2003.03.24 19:05
      그건 델파이 타입이구요. 타입라이브러리에서 델파이 TColor 에 맞는 속성타입을 정하잖아요? 그게 뭔...
    • 콤보
    • 2003.03.22 02:50
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 최용일
      2003.03.22 04:20
      안녕하세요. 최용일입니다. PCom이라는 패키지에 Scped002라는 유닛을 추가해주시면 됩니다. 아마 PC...
    • 콤보
      2003.03.27 03:34
      최용일님 답변 정말 감사합니다.
    • 박준하
    • 2003.03.22 02:41
    • 4 COMMENTS
    • /
    • 0 LIKES
    • 구창민
      2003.03.22 03:05
      OS 가 무엇인가여? 저는 그런경험이 없는데, 우선 RichEdit 이 WordWrap 되는 시점에 즉, 크기가...
    • 박준하
      2003.03.22 03:19
      win2000 server에서 compile 했습니다 win98에서 테스트 해 보았구요 winNT에서만 정상적으로 동작하...
    • 구창민
      2003.03.22 03:47
      이곳에서는 윈도그2000 프로페셔널을 사용중인데 정상적으로 동작합니다. 제가 답변드린 코드를 기술...
    • 박준하
      2003.03.22 04:01
      화면을 첨부 합니다. --------------- TRichEdit1 TRichEdit2 티리치에디터1 티리치에디터2 ----...
    • 윤성필
    • 2003.03.22 02:08
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 구창민
      2003.03.22 02:17
      ExistsDirectory(); MkDir();
    • 한원희
      2003.03.22 10:58
      안녕하세요. 한원희입니다. 한 가지 덧붙이자면, 폴더가 여러 경로를 타고 들어간다면... 일일이 재귀함...
    • 아폴론
    • 2003.03.22 00:59
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 최용일
      2003.03.22 02:27
      안녕하세요. 최용일입니다. 왜 이름에 집착하시는지... 걍 인스턴스 넘겨주시면 될텐데... 그리고 어...
    • 빵빵빵
      2003.03.22 18:45
      저의 경험으로 메뉴활성화에서요. 이런 걸 해봤었거든요. for  i:=0 to frmMain.Mainmenu1.i...
    • 혜월
      2003.03.22 00:43
      var     wnd: HWND; begin     WinExec( 'C:Program FilesMic...
    • 구창민
      2003.03.21 22:59
      System 탭의 OleContainer 컴포넌트를 사용해보세요. 메뉴도 병합시킬수 있답니다. 그럼~ 즐거운 프...
    • 홍진혁
    • 2003.03.21 20:51
    • 5 COMMENTS
    • /
    • 0 LIKES
    • 최남선
      2003.03.22 01:32
      SetProcessAffinityMask API를 사용하시면 되여...
    • 구창민
      2003.03.22 03:18
      남선님 안녕하세요 구창민입니다. 그 함수에 대해 찾아보니 몇몇 정보가 있긴 했습니다. 남선님이 ...
    • 최남선
      2003.03.22 03:49
      급하게 만들어 봤읍니다. 작업관리자로 CPU사용내용을 확인해보세여... 3번째 CPU만 선호도를 설정하려...
    • 김영대
      2003.03.22 00:36
      // 안녕하세요 김영대(http://www.howto.pe.kr) 입니다 아마 힘들지 않을까 합니다 CPU 스케쥴링은...
    • 구창민
      2003.03.22 00:45
      음훼훼 워찌나 똑똑한지 .. 근디 멀티 쓰레드 작업을 할때 듀얼 시피유가 나름대로 똑똑하게 작...
    • 이진우
    • 2003.03.21 20:02
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 최용일
      2003.03.21 20:28
      안녕하세요. 최용일입니다. Delete함수를 이용해서 하실 수도 있구, StringReplace함수를 쓰셔두 되구요...
    • 이진우
      2003.03.21 20:33
      감사합니다...^^
    • 델사랑
    • 2003.03.21 08:16
    • 3 COMMENTS
    • /
    • 0 LIKES
    • 김병곤
      2003.03.21 19:14
      음...질문은 정확하게 올리셔야죠. 실행파일명으로 보아 서버소켓을 오픈시키는 프로그램인듯한데 실행시...
    • 델사랑
      2003.03.21 21:26
      말씀 감사합니다 그런데 바꿀수 잇는 옵션이 어디있나요? 아무리 찾아봐도 모르겠어요 죄송한데 방법을 ...
    • 구창민
      2003.03.21 23:09
      보니깐 그 프로그램이 델파이7/bin 디렉토리에 있군여. 저는 그게 머하는 프로그램인지 모르겟는데, ...
    • 이재훈
    • 2003.03.21 06:27
    • 2 COMMENTS
    • /
    • 0 LIKES
    • KDDG_RNStone
      2003.03.21 19:02
      두개의 프로그램 상에서 넘겨 주고 받는 데이터가 이미 약속된 것이라면 걍 실행파일 뒤에 적으면 되지여 ...
    • 이재훈
      2003.03.21 23:36
      11
    • 조경모
    • 2003.03.21 06:00
    • 3 COMMENTS
    • /
    • 0 LIKES
    • yosule
      2003.03.21 11:08
      case combobox.itmeindex of 0:begin       opendialog1.InitialDir :='...
    • 조경모
      2003.03.21 18:46
    • 구창민
      2003.03.21 23:22
      -_-+ @?$#%? 제가 테스트 해봤는데 잘되던데여? 코드는 잘못된 점이 없어 보이니 다른 문제가 있을듯...
    • 김민아
    • 2003.03.21 05:48
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 티모니
      2003.03.21 19:27
      프로그램 중복 실행 시키는 소스 부분을 DLL 호출시에 추가 하시면 됩니다. ^^ 소스는 팁게시판에 가시...
    • 이태환
    • 2003.03.21 03:46
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 최용일
      2003.03.21 20:21
      안녕하세요. 최용일입니다. Free메소드 호출하시면 되는데요... 인스턴스 := 클래스.Create(...); ....
    • 이태환
      2003.05.07 03:58
      *^^*
    • 호롱불
    • 2003.03.21 03:36
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 장태원
      2003.04.01 19:06
      말도 안되는 작업을 하실려고 하는군요.. ㅡㅡ; 비추입니다. 스토워프로시져는 모드 코딩으로 바꿔야 하...