18장 동시성2 (408~419)

클라이언트/서버 예제

@Test(timeout = 10000)
public void shouldRunInUnder10Seconds() throws Exception {
	Thread[] threads = createTthreads();
	startAllThreads(threads);
	waitForAllThreadsToFinish(threads);
}

→ 전형적인 시스템 작업 처리량을 검증하는 케이스

→ 단일 스레드라면 환경에서 속도를 끌어올릴 방법은 없다

  1. I/O : 소켓 사용, DB 연결, 가상 메모리 스와핑 기다리기 등

    → 동시성으로 성능을 해결

  2. 프로세서 : 수치 계산, 정규표현식 처리, 가비지 컬렉션 등

    → 하드웨어를 추가해 성능을 높인다

가능한 실행 경로

public class IdGenerator {
	int lastIdUsed;

	public int incrementValue(){
		return ++lastIdUsed;
	}
}

만약 2개의 스레드가 존재한다면 가능한 경우의 수는?

→ return ++lastIdUsed 자바 코드 한 줄은 바이트 코드 명령 8개에 해당

→ 가능한 경로 수는 12,870개