CS

병렬성(Parallelism)과 동시성(Concurrent)

cob 2024. 9. 13. 09:19

 

1. 병렬성(Parallelism)

병렬성

  • 한 개의 코어(CPU)에는 한 개의 Thread가 실행된다.
  • 동시성의 하위 개념으로 운영체제에서 여러 CPU에 Thread를 적절히 분배하여 동시적으로 실행한다.

 

 

 

2. 동시성(Concurrent)

 

동시성

  • CPU가 한번에 많은 작업을 처리한다. 즉, 하나의 CPU가 여러 Thread를 교체하며 조금씩 작업을 처리한다.
  • 동시성은 작업을 빠르게 처리하는 게 목적이 아닌 CPU를 효율적으로 사용하는 것에 중점을 둔다.
  • CPU의 코어 개수보다 Thread의 개수 많을 경우만 해당된다.

 

 

3. ThreadPoolExecutor

병렬성으로 처리 성능을 극대화하고, 동시성으로 CPU 자원을 효율적으로 운용한다.

병렬성과 동시성 조합

 

@Test
public void test() {
    // CPU 코어 개수
    int core = Runtime.getRuntime().availableProcessors();
    System.out.println("core : " + core);

    // CPU 코어 개수 만큼 데이터 생성
    List<Integer> data = new ArrayList<>();
    for (int i = 0; i < core; i++) {
        data.add(i);
    }

    long stTime = System.currentTimeMillis();

    // CPU 개수만큼 병렬 처리
    long sum = (long) data.parallelStream()
            .mapToDouble(i -> {
                try {
                	// 0.5초 대기
                    Thread.sleep(500);
                } catch (InterruptedException e) {
                    throw new RuntimeException(e);
                }
                return i * i;
            })
            .sum();

    long edTime = System.currentTimeMillis();

    System.out.println("처리 시간 :" + (edTime - stTime) + "ms");
    System.out.println("결과: " + sum);
}

결과

CPU 코어 개수 만큼 Thread를 실행하면 병렬 처리로 모든 코어가 동시에 작업해 완료될 때까지 걸리는 시간은 동일하게 0.5초이다. 하지만 하나로 Thread의 개수가 많아지면 그때부터는 동시성 처리로 작업하는데 걸리는 시간이 달라진다.

 

반응형