동시성 및 병렬성
동시성:# 🎜🎜#은 일정 기간 내에 여러 작업을 번갈아 실행하는 것을 말합니다. 여러 개의 스레드가 동작하는 경우 CPU 실행 시간을 여러 시간으로 나누어 각 스레드에 해당 시간을 할당하여 실행합니다. 한 스레드의 코드가 실행되는 동안 다른 스레드는 일시 중지됩니다.
병렬: 은 동시에 여러 작업을 처리하는 능력을 나타냅니다. 여러 스레드가 작동 중일 때 CPU가 이러한 스레드의 요청을 동시에 처리할 수 있는 능력입니다.
그래서 동시성 환경에서는 프로그램의 종료가 깨지며 다음과 같은 특징이 나타납니다. 1 동시성 프로그램 간에는 상호 제한 관계가 있습니다. 직접적인 제약은 다른 프로그램의 계산 결과를 요구하는 하나의 프로그램에 반영되며, 간접적인 제약은 프로세서, 버퍼 등과 같은 공유 리소스를 두고 경쟁하는 여러 프로그램에 반영됩니다. 2. 동시 프로그램의 실행 프로세스가 간헐적으로 발생합니다. 프로그램은 현장 지침과 실행 지점을 기억해야 합니다. 3. 동시성 수를 적절하게 설정하고 CPU의 처리 능력이 충분하면 동시성이 프로그램의 실행 효율성을 향상시킵니다. 동시 환경에서 여러 스레드가 개체에 액세스할 수 있으면 액세스된 모든 스레드에서 개체가 수정되어 데이터 불일치가 발생합니다. 따라서 스레드 안전(thread safety) 개념이 제안되었습니다.스레드의 기본 개념 소개
스레드 및 프로세스# 🎜🎜 #Process: 각 프로세스에는 독립적인 코드와 데이터 공간(프로세스 컨텍스트)이 있습니다. 프로세스 간 전환에는 큰 오버헤드가 발생합니다. (프로세스는 자원 할당의 최소 단위입니다.) 간단히 말해서 프로세스는 서로 격리되어 어느 정도 독립적으로 실행되는 프로그램입니다.
Threads: 동일한 유형의 스레드는 코드와 데이터 공간을 공유합니다. 각 스레드에는 독립적인 실행 스택과 프로그램 카운터(PC)가 있으며 스레드 전환 오버헤드가 작습니다. (스레드는 CPU 스케줄링의 가장 작은 단위입니다)
스레드는 프로세스와 같이 생성, 준비, 실행, 차단, 종료의 5단계로 구분됩니다.
1. 생성: 새 스레드 개체가 생성되었지만 start() 메서드가 아직 호출되지 않았습니다. 예: Thread thread = new Thread();
2 준비: 스레드 개체가 생성된 후 다른 스레드(예: 기본 스레드)가 개체의 start() 메서드를 호출합니다. 이 상태의 스레드는 실행 가능한 스레드 풀에 위치하며 CPU 사용 권한을 얻기 위해 스레드 스케줄링에 의해 선택되기를 기다리고 있습니다.
3. 실행: 실행 중인 상태(runnable)의 스레드가 CPU 타임 슬라이스(timeslice)를 획득하고 프로그램 코드를 실행합니다.
4. 차단됨: 스레드가 차단되었습니다. "차단된 상태"와 "대기 상태"의 차이점은 다음과 같습니다. "차단된 상태"는 다른 스레드가 독점 잠금을 얻기 위해 대기 중입니다. 잠금을 포기하고 "대기 상태"가 일정 시간 동안 대기하거나 깨우기 작업이 발생합니다. 프로그램이 동기화된 영역(동기화)에 들어가기를 기다리는 동안 스레드는 이 상태에 들어갑니다.
(1). 차단 대기 중: 실행 중인 스레드가 o.wait() 메서드를 실행하고 JVM이 스레드를 대기 대기열에 넣습니다.
(2) 동기 차단: 실행 중인 스레드가 객체의 동기화 잠금을 획득할 때 동기화 잠금이 다른 스레드에 의해 점유된 경우 JVM은 스레드를 잠금 풀( 잠금 풀)에 넣습니다. ).
(3) 기타 차단: 실행 중인 스레드가 Thread.sleep(long ms) 또는 t.join() 메서드를 실행하거나 I/O 요청을 발행하면 JVM은 다음을 수행합니다. 차단된 상태로 놓였습니다. sleep() 상태가 시간 초과되거나, Join()이 스레드가 종료되거나 시간 초과될 때까지 기다리거나, I/O 처리가 완료되면 스레드는 실행 가능 상태로 돌아갑니다.
5. 대기: 이 상태에 진입한 스레드는 다른 스레드가 특정 작업(알림 또는 인터럽트)을 수행할 때까지 기다려야 합니다.
6. 차단: 스레드가 내부 객체 잠금(비java.util.concurrent 라이브러리 잠금)을 획득하려고 시도하고 다른 스레드가 잠금을 보유하면 스레드는 차단 상태로 들어갑니다.
7. 대기 중: 스레드가 다른 스레드가 스케줄러에 조건을 알리기를 기다리는 경우 스레드는 대기 상태로 들어갑니다. 예를 들어 Object.wait(), Thread.join()을 호출하고 잠금 또는 조건을 기다립니다.
8. 타임아웃 대기(TIMED_WAITING): 이 상태는 WAITING과는 다르며, 지정된 시간 이후에 스스로 반환될 수 있습니다.
9. TERMINATED: 스레드 실행이 완료되었음을 나타냅니다.
위 내용은 자바에서 동시성이란 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!