콘텐츠로 이동

13. 멀티쓰레드 프로그램#

멀티쓰레드 프로그램#

APRE는 내장 SQL문을 이용한 멀티쓰레드 프로그램을 지원한다. 여기에서는 멀티쓰레드 프로그램 작성시 내장 SQL문 사용방법 및 주의 사항에 대해 알아보기로 한다.

환경설정#

전처리 시 멀티쓰레드 프로그램의 판단근거를 전처리기에게 제공하여야 하는데, 다음의 2가지 방법을 이용할 수 있다.

  • command line에서 -mt 옵션을 지정하는 방법

    < 예제 >

    $ apre -mt sample1.sc
    
  • 파일 안에서 OPTION문을 사용하는 방법

    < 예제 >

    EXEC SQL OPTION (THREADS = TRUE);
    

설명#

  • 각 쓰레드마다 각각의 connection이 있어야 한다. 즉, 여러 쓰레드가 하나의 connection을 공유할 수 없다.
  • 연결 이름은 프로그램 내에서 유일해야 한다. 같은 이름으로 CONNECT를 수행한다면 "The connection already exists." 오류가 발생한다.
  • 연결 이름을 가지지 않는 connection(즉, default connection)은 프로그램 내에 하나만 허용한다.
  • 내장 SQL문에서도 사용할 연결 이름을 명시하여야 한다. 연결 이름을 사용하는 방법은 12장을 참조하기 바란다.

참고: APRE 의 이전 버전 (즉, SESC 버전 3.5.5 이전)에는 내장 SQL문을 사용하는 모든 함수에서 EXEC SQL THREADS; 문장을 선언하여야 한다. 그러나 이후 버전에서는 명시하지 않아도 되며, 기존의 프로그램에 EXEC SQL THREADS 구문을 사용한 것과 호환된다.

예제 프로그램#

mt1.sc#

$ALTIBASE_HOME/sample/APRE/mt1.sc 참고

실행결과#
$ is -f schema/schema.sql
$ make mt1
$ ./mt1
<MULTI THREADS 1>

mt2.sc#

$ALTIBASE_HOME/sample/APRE/mt2.sc 참고
실행결과#
$ is -f schema/schema.sql
$ make mt2
$ ./mt2
<MULTI THREADS 2>
-----------------------------------------------------------
ORDER_DATE              ENO   GNO                                 
-----------------------------------------------------------
2000/11/29 00:00:00     12    A111100002
2000/11/29 00:00:00     12    E111100001
2000/11/29 00:00:00     19    E111100001
2000/12/10 00:00:00     19    D111100008
2000/12/01 00:00:00     19    D111100004
2000/12/29 00:00:00     12    C111100001
2000/12/29 00:00:00     20    E111100002
2000/12/30 00:00:00     20    D111100002
2000/12/30 00:00:00     19    D111100008
2000/12/30 00:00:00     20    A111100002
2000/12/30 00:00:00     12    D111100002
2000/12/30 00:00:00     20    D111100011
2000/12/30 00:00:00     20    D111100003
2000/12/30 00:00:00     19    D111100010
2000/12/30 00:00:00     20    C111100001
2000/12/30 00:00:00     12    E111100012
2000/12/30 00:00:00     20    C111100001
2000/12/30 00:00:00     12    F111100001