초기 컴퓨터에는 운영 체제가 포함되어 있지 않았습니다. 처음부터 끝까지 하나의 프로그램만 실행했으며 이 프로그램은 컴퓨터의 모든 리소스에 액세스할 수 있었습니다. 컴퓨터의 발전과 운영체제의 출현으로 컴퓨터는 여러 프로그램을 동시에 실행할 수 있으며, 각 프로그램은 별도의 프로세스에서 실행됩니다. 왜 이런 일을 하는가? 주로 다음과 같은 이유에 근거합니다:
컴퓨터가 단일 작업에서 다중 작업으로 진화했기 때문에 프로그램도 자연스럽게 전통적인 직렬 프로그램에서 동시 프로그램으로 발전할 수 있습니다.
직렬 프로그램의 장점은 간단하고 직관적이라는 것입니다. 하지만 threads의 등장을 촉발한 것도 위의 세 가지 이유 때문이기도 합니다. 위의 컴퓨터는 별도의 프로세스에서 프로그램을 실행할 수 있으며 스레드를 사용하면 동일한 프로세스 내에 여러 프로그램 제어 흐름이 존재할 수 있습니다. 프로그램의 여러 스레드가 동시에 여러 CPU에서 실행되도록 예약할 수도 있습니다. 이는 컴퓨터가 동시에 여러 프로그램(프로세스)을 실행하는 것과 동시에 여러 스레드를 실행하는 프로그램과 동일합니다. 즉, 프로세스 내에서 스레드를 실행하는 것입니다.
스레드는 경량 프로세스라고도 합니다. 오늘날의 운영 체제는 모두 스레드를 기본 단위로 사용하도록 예약되어 있습니다. 스레드 간에 리소스가 공유되므로 명확한 동기화 메커니즘이 없으면 스레드 간의 실행 혼란, 데이터 오류나 실패, 예외가 발생합니다. 동시 프로그래밍에 어려움이 있는 경우가 종종 있습니다.
내 관점에서는 소위 동시 프로그래밍은 스레드를 사용하는 것입니다. 스레드는 많은 비동기 작업 흐름을 직렬 작업 흐름으로 변환할 수 있으며 동시 프로그래밍은 비동기 상황에서 동기화를 달성하여 요구 사항을 충족하도록 하는 것입니다.
그럼 스레드의 장점과 위험성은 무엇일까요?
스레드는 프로그램 개발 및 유지 관리 비용을 효과적으로 줄이고 성능을 향상시킬 수 있습니다. 코드 복잡성을 줄이고 인간의 작업 방식을 더 효과적으로 시뮬레이션합니다.
스레드 지원은 양날의 검이며 동시 프로그램의 개발은 프로그래머에게 더 높은 수준의 요구 사항을 가져옵니다.
보안에 대한 좋은 예가 있습니다:
value++;
이 코드 한 줄이면 싱글 쓰레드 프로그램에서는 전혀 문제가 없지만, 멀티 쓰레드 프로그램에서는 예상치 못한 결과가 발생할 수 있습니다.
이 코드 줄을 실행하는 세 단계가 있습니다. 1. 값을 읽습니다. 2. 값에 1을 더합니다. 3. 추가된 값을 다시 값에 할당합니다. 이 기간 동안 두 스레드가 동시에 값을 읽고 동일한 값을 얻은 다음 동시에 1을 더하면 결과적으로 서로 다른 스레드가 동일한 값을 갖게 됩니다. . 그리고 우리는 이 값이 두 번 추가될 것으로 예상합니다.
모든 Java 프로그램은 스레드를 사용합니다. 프로그램에서 스레드를 명시적으로 생성하지 않은 경우에도 사용하는 프레임워크는 스레드로부터 안전해야 합니다.
위 내용은 JAVA에 대한 간략한 소개의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!