SW Engineering/OS Concept

15_스레드 라이브러리

SungWookKang 2015. 7. 16. 13:06
반응형

15_스레드 라이브러리

 

스레드 라이브러리(thread library)는 프로그래머에게 스레드를 생성하고 관리하기 위한 API를 제공한다. 스레드 라이브러리를 구현하는데는 두 가지 방법이 있다.

  • 커널의 지원 없이 완전히 사용자 공간에만 라이브러리를 제공하는 것. 라이브러리를 위한 모든 코드와 자료구조는 사용자 공간에 존재한다. 라이브러리의 함수를 호출하는 것은 시스템 호출이 아닌 사용자 공간의 지역 함수를 호출하게 된다.
  • 운영체제에 의해 지원되는 커널 수준의 라이브러리를 구현. 라이브러리를 위한 코드와 자료구조는 커널 공간에 존재한다. 라이브러리 API를 호출하는 것은 커널 시스템 호출을 사용한다.

 

 

[Pthread]

Pthread는 POSIX(IEEE 10031.1c)가 스레드 생성과 동기화를 위한 제정한 표준 API이다. 이것은 스레드의 동작에 관한 명세일 뿐 그것 자체를 구현한 것은 아니다. Solaris, Linux, Mac OSX, UNIX를 포함한 많은 시스템들이 Pthread 명세를 구현하고 있다. Windows 계열의 운영체제들을 구현은 퍼블릭 도메인(Public Domain)에서 쉐어웨어(shareware)형태로 얻을 수 있다.

 

 

[Win32 스레드 (Win32 Thread)]

Win32 스레드 라이브러리를 이용하여 스레드를 생성하는 기술은 많은 점에서 Pthread기법와 유사하다. Pthread 버전과 마찬가지로 개별 스레드가 서로 공유하는 자료는 전역변수로 선언된다. (DWORD 데이터형 유형은 부호가 없는 32비트 정수이다.)

 

 

[Java 스레드 (Java Thread)]

스레드는 Java 프로그램의 프로그램 실행의 근본적이 모델이고 Java 언어와 API는 스레드의 생성과 관리를 지원하는 풍부한 특성을 제공한다. 모든 Java 프로그램은 적어도 하나의 단일 제어 스레드를 포함하고 있다. 단지 main() 메소드로만 이루어진 단순한 Java 프로그램조차 JVM 내의 하나의 단일 스레드로 수행 된다.

 

 

Java 프로그램에서 스레드를 생성하는 기법에는 두 가지가 있다.

  • Thread 클래스로부터 파생된 새로운 클래스를 생성하고 Thread 클래스의 run() 메소드를 무효화 (override)하는 것
  • runnable 인터페이스를 구현하는 클래스를 정의하는 것. 클래스가 runnable 을 구현 할 때 run() 메소드를 구현해야 한다. run() 메소드를 구현하는 코드는 별도의 스레드로 실행 된다.

 

 

 

Win32와 Pthread에서는 공유 데이터가 단순히 전역 변수로 선언되기 대문에 스레드간의 자료 공유를 쉽게 할 수 있다. Java는 순수 객체지향 언어이기 때문에 그런 전역 변수의 개념을 제공하지 않는다. 만일 Java 프로그램에서 둘 이상의 스레드가 자료를 공유해야 한다면 공유 객체에 대한 참조를 적당한 스레드에게 전달함으로써 공유한다.

 

 

[참고자료]

 

반응형