본문 바로가기

병렬프로그래밍

(5)
[병렬프로그래밍] 멀티 스레드와 동기화 멀티 스레드와 동기화 스레드를 사용하게되면 필연적으로 만나게되는 문제가 바로 동기화(Synchronization)입니다. 아래는 여러개의 스레드가 실행되는 과정을 도식화한 그림입니다. 여러개의 스레드들이 있다면 이 스레드들은 서로 번갈아가면서 실행이 될 것입니다. CPU가 하나이기때문에 OS의 스케줄링 정책에 따라 쓰레드를 조금씩 실행시키는 방식이 됩니다. 어떤 스레드가 실행될지는 OS 스케줄러만 알고 있습니다. - 애플리케이션에서 하나 이상의 스레드 사용시 새로운 스레드를 한개라도 생성해서 운영한다면 멀티스레드 프로그램이 됩니다.- 스레드는 별도로 실행되는 하나의 실행이므로 동시에 여러 스레드가 실행되면 스레드들이 공유하는 자원에 대해 동기화가 발생할 수 있습니다. 만약 스레드들이 서로 침범하는 영역없..
[병렬프로그래밍] 스레드그룹 이해하기 스레드 그룹 자바에서는 스레드들을 여러개 묶어 그룹으로 관리할 수 있습니다. 자바에서 제공하는 클래스들 중에는 쓰레드가 있고 스레도 그룹도 있습니다. 스레드 그룹 객체를 생성하면 그 밑에 스레드들을 모아 놓을 수 있습니다. 여러 개의 쓰레드들을 한꺼번에 모아서 관리하고 싶을때 이용하기도 합니다. 평상시에 스레드 그룹을 사용할 일이 많지는 않지만 대용량 프로그램의 경우에는 스레드 그룹을 이용하면 유용하게 스레드를 컨트롤할 수가 있습니다. 1) 스레드 그룹 개요- 애플리케이션에서 많은 스레드 생성시 사용- 스레드를 그룹으로 묶어서 사용하는 것이 편리- 그룹안의 스레드를 제어하기 위한 지원메소드 부족 (자바 라이브러리 중 가장 실패한 부분 중 하나) 2) 스레드 그룹 구성- 자바에서의 모든 스레드는 특정 스레..
[병렬프로그래밍] 스레드 이해하기 스레드의 생명주기 스레드의 생명주기는 프로세스의 생명주기와 유사합니다. java에서 프로세스 생명주기를 나타내는 그림입니다. 프로그램이 실행되면 메인부터 시작하여 하나하나씩 개발자가 짠 함수들이 순차적으로 실행됩니다. 이때 a(), b()라는 함수가 있는데, 동시에 실행하고 싶을때 쓰레드를 이용하게 됩니다. 각 함수별로 해당 함수를 실행하는 스레드를 생성합니다. 자바에서 실행되는 모든 엔티티는 객체입니다. 쓰레드 역시 마찬가지로 객체입니다. 쓰레드를 실행하는 메소드(start()) 실행하면 쓰레드가 동작하면서 CPU가 점유된 상태가 됩니다. 스레드 이후 커리큘럼은 파일 IO에 대한 설명이 이루어지는데, 파일 IO 역시 네트워크 프로그래밍과 연결되어 있습니다. 왜냐하면 네트워크 프로그래밍은 결국 네트워크 ..
[병렬프로그래밍] 프로세스, 스레드 개념 프로세스란 무엇인가?- 프로세스 : 자기 자신만의 주소 공간을 갖는 독립적인(Self-Contained) 실행 프로그램- 멀티 프로세스 : 두 개 이상의 프로세스가 실행되는 것. 프로그램이 여러개 띄워져 있는 형식.- 멀티 태스킹 : 두 개 이상의 프로세스를 실행하여 일을 처리하는 것 프로그램 : 스태틱하게 머신에 인스톨되어있는 인스트럭션(코드, 커맨드, 실행해야할 명령)등의 집합프로세스 : 프로그램이 실행중(프로그램 안의 인스트럭션들이 실행되고 있는 중)인 것. 스레드란 무엇인가?- 스레드(경량 프로세스) : 프로세스 내의 독립적인 순차흐름 또는 제어- 멀티 스레드 : 하나의 프로세스에서 여러 개의 스레드가 병행적으로 처리 프로세스 내에 스레드란 개념이 포함되어 있으므로 스레드와 프로세스는 서로 연관이..
[병렬프로그래밍] 자바 병렬 프로그래밍 소개 자바에서 제공하는 저수준의 도구와 설계 수준의 정책 간 차이점을 극복할 수 있도록 병렬 프로그램을 작성하는데 필요한 간결한 규칙이 필요합니다. 자바 메모리 모델의 깊숙한 부분까지 이해하면 병렬 프로그램 작성을 잘할수 있는건 맞지만 그런 상세한 내용을 모르는 상태에서도 올바르게 동작하는 병렬 프로그램을 작성할수 있도록 도와주려는 의도가 있습니다. 자바 병렬 프로그래밍과 관련하여 간결한 규칙을 잘 따르면 올바르면서도 유지보수도 간편한 병렬 프로그램을 작성 가능합니다. 동기화에 대한 기본 지식 필요합니다.자바 동기화 기능에 대한 입문서 The Java Programming Language 스레드 관련 부분.Concurrent Programming in Java 등을 참고. 기본 원리 / 병렬 프로그램 구조 잡..