>  기사  >  Java  >  JAVA에 대한 간략한 소개

JAVA에 대한 간략한 소개

怪我咯
怪我咯원래의
2017-06-23 13:52:061310검색

간략한 역사

초기 컴퓨터에는 운영 체제가 포함되어 있지 않았습니다. 처음부터 끝까지 하나의 프로그램만 실행했으며 이 프로그램은 컴퓨터의 모든 리소스에 액세스할 수 있었습니다. 컴퓨터의 발전과 운영체제의 출현으로 컴퓨터는 여러 프로그램을 동시에 실행할 수 있으며, 각 프로그램은 별도의 프로세스에서 실행됩니다. 왜 이런 일을 하는가? 주로 다음과 같은 이유에 근거합니다:

1.리소스 활용 컴퓨터는 프로그램이 기다리는 동안 다른 프로그램을 실행할 수 있으며, 동일한 리소스를 다른 프로그램에서 사용할 수 있으므로 리소스 활용도가 확실히 향상됩니다.
2.공정성 다른 사용자와 프로그램은 동일한 컴퓨터 사용 권한을 갖습니다. 각 프로그램은 다음 프로그램을 시작하기 전에 이전 프로그램의 실행이 끝날 때까지 기다리는 대신 시간 분할을 통해 리소스를 공유합니다.
3.편의성 각 프로그램은 독립적으로 실행되며 필요할 때 서로 통신하므로 하나의 프로그램으로 모든 작업을 완료하는 것보다 구현하기가 더 쉽습니다.

컴퓨터가 단일 작업에서 다중 작업으로 진화했기 때문에 프로그램도 자연스럽게 전통적인 직렬 프로그램에서 동시 프로그램으로 발전할 수 있습니다.

 직렬 프로그램의 장점은 간단하고 직관적이라는 것입니다. 하지만 threads의 등장을 촉발한 것도 위의 세 가지 이유 때문이기도 합니다. 위의 컴퓨터는 별도의 프로세스에서 프로그램을 실행할 수 있으며 스레드를 사용하면 동일한 프로세스 내에 여러 프로그램 제어 흐름이 존재할 수 있습니다. 프로그램의 여러 스레드가 동시에 여러 CPU에서 실행되도록 예약할 수도 있습니다. 이는 컴퓨터가 동시에 여러 프로그램(프로세스)을 실행하는 것과 동시에 여러 스레드를 실행하는 프로그램과 동일합니다. 즉, 프로세스 내에서 스레드를 실행하는 것입니다.

 스레드는 경량 프로세스라고도 합니다. 오늘날의 운영 체제는 모두 스레드를 기본 단위로 사용하도록 예약되어 있습니다. 스레드 간에 리소스가 공유되므로 명확한 동기화 메커니즘이 없으면 스레드 간의 실행 혼란, 데이터 오류나 실패, 예외가 발생합니다. 동시 프로그래밍에 어려움이 있는 경우가 종종 있습니다.

 내 관점에서는 소위 동시 프로그래밍은 스레드를 사용하는 것입니다. 스레드는 많은 비동기 작업 흐름을 직렬 작업 흐름으로 변환할 수 있으며 동시 프로그래밍은 비동기 상황에서 동기화를 달성하여 요구 사항을 충족하도록 하는 것입니다.

 그럼 스레드의 장점과 위험성은 무엇일까요?

스레드의 장점

스레드는 프로그램 개발 및 유지 관리 비용을 효과적으로 줄이고 성능을 향상시킬 수 있습니다. 코드 복잡성을 줄이고 인간의 작업 방식을 더 효과적으로 시뮬레이션합니다.

장점 1 멀티프로세서의 강력한 기능을 최대한 활용하세요. 멀티프로세서 시스템이 점점 더 완벽해지면서 스레드의 역할이 더욱 분명해지고 있습니다. 특히 I/O 작업 중에 여러 프로세서가 서로 다른 스레드를 동시에 예약할 수 있으므로 프로그램의 대기 시간이 줄어들어 프로그램 실행 효율성이 향상되어 시스템 처리량이 확장됩니다.
장점 2. 여러 가지 일을 하는 것보다 항상 같은 일을 하는 것이 더 쉽습니다. 스레드를 사용하여 프로그램 작업을 구체화하고 여러 작업을 여러 스레드에 할당합니다. 각 스레드는 단일 작업을 가지며 필요할 때 작업을 앞뒤로 전환하는 데 단일 스레드보다 비용이 적게 듭니다.
장점 3. 비동기 이벤트 처리 단순화 응답을 기다리기 위해 요청이 발행되면 전체 프로그램이 기다려야 합니까? 이는 다른 모든 요청이 중단됨을 의미합니다. 채팅할 때와 마찬가지로 상대방이 먼저 답장을 해야 다음 문장을 말할 수 있습니다. 이는 분명히 불합리한 일입니다. 각 요청이 스레드에 의해 처리되면 스레드는 독립적이며 서로 영향을 미치지 않으므로 문제가 해결됩니다. 물론 상대방이 채팅에 답글을 달 때 무슨 말을 했는지 알아야 한다면 스레드 안전에 주의하세요.
장점 4. 반응성이 뛰어난 사용자 인터페이스 기존 GUI 프로그램은 단일 스레드로 구성되어 있어 사용자 이벤트 중 하나를 처리하는 데 너무 오랜 시간이 걸리면 전체 프로그램이 중단되어 사용자 경험이 더욱 악화됩니다. 시간이 많이 걸리는 일부 작업이 별도의 스레드에 할당되면 다른 이벤트는 여전히 스레드에 의해 처리되므로 사용자 인터페이스가 원활해집니다.

스레드 위험

스레드 지원은 양날의 검이며 동시 프로그램의 개발은 프로그래머에게 더 높은 수준의 요구 사항을 가져옵니다.

위험 1. 보안 문제 동시 프로그래밍은 단일 스레드 프로그램에서는 발생하지 않는 오류를 일으킬 수 있습니다.
Risk2. 활동성 문제 활동성의 정의는 "뭔가 올바른 일이 반드시 일어날 것"입니다. 단일 스레드의 무한 루프는 활성 문제입니다. 스레드 A가 스레드 B가 보유하고 있는 리소스를 해제할 때까지 기다리고 스레드 B가 리소스를 해제하지 않은 경우 스레드 A는 영원히 기다리게 됩니다. 이는 활동 문제입니다.
위험 3. 성능 문제 성능은 "올바른 일이 최대한 빨리 발생하는 것"입니다. 좋은 동시성 설계는 성능을 향상시키고, 그 반대의 경우도 결국 스레드를 시작하면 리소스가 소모됩니다.

 보안에 대한 좋은 예가 있습니다:

value++;

이 코드 한 줄이면 싱글 쓰레드 프로그램에서는 전혀 문제가 없지만, 멀티 쓰레드 프로그램에서는 예상치 못한 결과가 발생할 수 있습니다.

  이 코드 줄을 실행하는 세 단계가 있습니다. 1. 값을 읽습니다. 2. 값에 1을 더합니다. 3. 추가된 값을 다시 값에 할당합니다. 이 기간 동안 두 스레드가 동시에 값을 읽고 동일한 값을 얻은 다음 동시에 1을 더하면 결과적으로 서로 다른 스레드가 동일한 값을 갖게 됩니다. . 그리고 우리는 이 값이 두 번 추가될 것으로 예상합니다.

 모든 Java 프로그램은 스레드를 사용합니다. 프로그램에서 스레드를 명시적으로 생성하지 않은 경우에도 사용하는 프레임워크는 스레드로부터 안전해야 합니다.

위 내용은 JAVA에 대한 간략한 소개의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.