JAVA/JAVA 병렬프로그래밍

    JAVA 병렬 프로그래밍 [5] - 화장실 스케쥴링

    조건 화장실의 칸은 n개 이며, m명의 사람들이 급한 볼 일을 보기 위해 대기한다. 이를 이용하는 사람마다 이용 시간은 최소 1분에서 10분까지 걸린다. 화장실을 대기하는 사람들을 공평하고 안전하게 볼 일을 보고 나갈 수 있도록 시뮬레이터를 작성 처리 조건 화장실 칸 수는 실행 전에 인수로 받도록 하고 각 화장실을 스레드로 구현하도록 한다. 대기 하는 사람은 실행전 인수로 받도록 하고 랜덤 함수에 의하여 생성하도록 한다. 실행을 빨리 돌려야 하므로 1분을 1초로 환산하여 처리하도록 한다. 아래의 예와 같이 1분 단위로 상태 변화를 출력하여 스케줄링 상태를 확인할 수 있도록 한다. 최초 대기열 : [ 1 ( 7 / 7 ) ] [ 2 ( 10 / 10 ) ] [ 3 ( 8 / 8 ) ] [ 4 ( 9 / 9..

    JAVA 병렬 프로그래밍 [4] - Sharing Objects ( 객체 공유 )

    JAVA 병렬 프로그래밍 [4] - Sharing Objects ( 객체 공유 )

    병렬 프로그램 작성은 상태가 바뀔 수 있는 내용을 어떻게 잘 공유해 사용하도록 관리하는 지에 대한 문제라고 했다. 여러 개 스레드에서 특정 객체를 동시에 사용하려 할 때 안전하게 동작하도록 객체를 공유하고 공개해야 한다. 1. 가시성 - 메모리 가시성 : 한 스레드에서 변경한 특정 메모리 값이 다른 스레드에서 제대로 읽어지는지 - 가시성 보장 : mutex , critical section을 사용하여 memory barrier를 만든다. ! mutex , semaphore 란? 뮤텍스란 MUTual EXclusion으로 상호배제 를 뜻한다. Critical Section는 프로그램 상에서 동시에 실행될 경우 문제를 일으킬 수 있는 부분을 지칭한다. 그런 부분을 가진 스레드들의 동작시간이 서로 겹치지 않게..

    JAVA 병렬 프로그래밍 [3] - 멀티 스레드로 1-100까지의 합 구하기

    JAVA 병렬 프로그래밍 [3] - 멀티 스레드로 1-100까지의 합 구하기

    이번엔 스레드 10개를 이용해서 1-100까지의 합을 구하는 구현을 해보려고 한다. 결과물 [pool-1-thread-1 ] n = 2, sum = 3 [pool-1-thread-10 ] n = 10, sum = 55 [pool-1-thread-9 ] n = 9, sum = 45 [pool-1-thread-8 ] n = 8, sum = 36 [pool-1-thread-2 ] n = 5, sum = 15 [pool-1-thread-3 ] n = 1, sum = 1 [pool-1-thread-5 ] n = 4, sum = 10 [pool-1-thread-7 ] n = 7, sum = 28 [pool-1-thread-6 ] n = 6, sum = 21 [pool-1-thread-4 ] n = 3, sum = ..

    JAVA 병렬 프로그래밍 [2] - Thread Safety

    JAVA 병렬 프로그래밍 [2] - Thread Safety

    병렬 프로그래밍이란? 공유되고 변경할 수 있는 상태에 대한 접근 관리를 하는 것이다. 공유 : 여러 스레드가 특정 변수에 접근 할 수 있고 변경 할 수 있다는 의미 이러한 접근 관리에는 스레드 안정성이 필요하다. 스레드 안정성 - 데이터 제어 없이 동시접근을 막음을 의미 - 객체가 스레드에 안전해야 하느냐는 해당 객체에 여러 스레드의 접근여부에 달렸다. - 스레드가 하나 이상의 상태 변수에 접근하고 그 중 하나 이상의 변수에 값을 쓰면 , 해당 변수에 접근 할 때 관련된 모든 스레드가 동기화 조율 대상 JAVA의 동기화 수단 - synchronized 키워드 - volatile, 명시적인 lock, 단일 연산 변수(atomic variable) ! 여러 스레드가 변경 할 수 있는 상태 변수를 적절한 동기..

    JAVA 병렬 프로그래밍 [1]

    프로그램을 제대로 돌아가게 작성하는 일은 정말 어렵다. 하지만 여러 작업을 동시에 실행하는 프로그램을 제대로 돌아가게 작성하기는 훨씬 더 어렵다. 그럼에도 불구하고 왜 작업을 동시에 실행하는 문제에 신경을 써야할까? 스레드는 자바 언어에서 피할 수 없는 특성이고, 복잡한 비동기 코드를 더 단순한 순차적 코드로 바꿔 복잡한 시스템을 단순하게 개발할 수 있게 해주기 때문이다. 초창기 컴퓨터에는 운영체제 자체가 없었다. 운영체제 없이 하드웨어 위에서 바로 실행되는 프로그램은 작성하기도 힘들었을 뿐만 아니라 한 번에 하나의 프로그램만 실행하느라 그 값비싸던 자원을 비효율적으로 사용 할 수 밖에 없었다. 영화 이미테이션 게임에 나오는 튜링머신과 같이, 배선이나 진공관을 직접 계산시마다 바꿔줘야 했기 때문에 다수의..