넷째, 프로세스 스레드 동기 비동기 동시 병렬 이해 차단 비 차단

I. 배경

전면 1. 우리가에 대한 많은 지식을 설명해야 할 몇 가지 블로그 게시물 멀티 스레드, 오늘 당신을 돕기 위해 희망, 여러 개념이 구체적인 설명을하기 전에 이야기를 준비, 우리가 오늘 자세히 설명 올 콘텐츠입니다.

당신이 이해하지 설명 메시지를 남겨주세요해야하는 경우 2. 오늘날 우리가 설명 할 지식을 이해하는 내 이전 블로그를 참조 할 수 있습니다. 아무 말도 오늘 설명하기 시작합니다.

둘째, 기본 개념

1. 프로세스와 스레드

(프로세스) :. 1.1 과정은 프로그램을 실행하는 데 필요한 자원을 포함하는 윈도우 시스템의 기본 개념입니다. 운영 시스템의 프로세스, 프로세스가 하나 개 이상의 스레드를 포함 할 수 있습니다로 실행중인 응용 프로그램을 볼 수 있습니다. 스레드 프로세스에서 동시에 코드를 실행하는 다수의 스레드를 가질 수 있으며, 운영 체제 할당 프로세서 시간의 기본 단위이다. 프로세스가 상대적으로 독립적 사이 (분산 컴퓨팅의 사용은 제외), Windows 시스템을 다른 프로세스의 작동에 영향을주지 않습니다 실행중인 프로세스의 실패 이상으로 나누어 져 작업의 프로세스의 사용이다, 프로세스는 다른 프로세스의 데이터에 액세스 할 수 없습니다 별도의 영역. 처리는 경계의 기본 프로그램으로 이해 될 수있다. 이 응용 프로그램의 실행의 역동적 인 과정의 일상적인 응용 프로그램을 실행합니다.

1.2 스레드 (스레드) 프로세스의 기본적인 실행 유닛 인 운영체제 할당 CPU 시간의 기본 단위이며, 여러 스레드를 포함 할 수있는 공정은, 첫 번째 스레드 입력 프로세스는이 프로세스의 메인 쓰레드로 간주 수행 . 은 CPU 레지스터 호출 스택 주로 스레드와 로컬 메모리 이들 스레드 (로컬 스토리지, TLS 나사). 현재 스레드를 실행하는 메인 CPU 레지스터의 상태 레코드가, 호출 스택은 메모리 및 데이터 스레드를 유지하기 위해 사용되며, TLS가 주로 상태 정보에 사용되는 쓰레드를 저장한다.

프로세스와 스레드 사이에 1.3의 차이 : 프로세스와 스레드 사이의 주요 차이점은 다른 운영 체제 자원 관리 점이다. 프로세스가 충돌 후 프로세스는 보호 모드에서 다른 프로세스에 영향을하지 않습니다, 별도의 주소 공간을 가지고 있고, 스레드는 다른 실행 경로의 과정이다.

스레드가 자신의 스택 및 로컬 변수를 갖지만, 하나의 스레드에 대한 스레드 간의 별도의 주소 공간이없고, 다이 스레드는 전체 공정의 다이에 해당 하나의 멀티 스레드 프로세스 절차보다 프로그램 견고하므로 있지만 공정 핸드 오버, 자원 소비가 큰, 효율이 나쁘다. 그러나 동시에 요구 사항의 일부와 만 스레드, 프로세스가 사용할 수없는 특정 변수의 동시 작업을 공유 할 수 있습니다.

  • 즉, 프로세스는 적어도 하나 개의 나사를 가지며, 상기 적어도 하나 개의 프로그램 방법이있다.
  • 스레드의 부문, 그래서 멀티 스레드 프로그램의 동시성 높은 과정보다 작은 확장 할 수 있습니다.
  • 또한, 프로세스가 구현 과정에서 별도의 메모리 유닛, 이에 크게 프로그램의 효율을 향상 공유 메모리의 다중 스레드를 가지고있다.
  • 구현 프로세스의 스레드와 프로세스가 다릅니다. 각 엔트리는, 순서 출구 수행 서열 및 절차를 실행하는 별도의 스레드를 갖는다. 그러나, 스레드는 애플리케이션에 의해 제어되는 다수의 실행 스레드를 제공하는 용도에 따라 존재하며, 독립적으로 수행 할 수 없다.
  • 논리적 관점에서 볼 때, 멀티 스레드 애플리케이션 프로그램 실행 부 동시에 복수를 수행 할 수 있다는 것을 의미한다. 그러나 운영 체제 스케줄링 및 관리, 자원 할당 프로세스를 달성하기 위해 여러 스레드 여러 개의 독립적 인 응용 프로그램으로 볼 수 없습니다. 이 프로세스와 스레드 사이의 중요한 차이입니다.

2. 동기화 (동기화) 및 비동기 (비동기)

2.1 동기화는 : 함수 호출, 결과가 없습니다 때까지 호출이 반환하거나 후속 조치를 계속하지 않을 때 소위 동기화가 발행됩니다. 간단히 말해, 동기화는 그런 다음 일을하기 위해 수행 정면으로, 한 가지를 수행해야합니다. 예를 들어 : B / S 패턴 양식 제출, 특정 프로세스는 다음과 같습니다 클라이언트에 의해 제출 된 요청 -> 서버 프로세스 기다리고 -> 반환이 과정에서 클라이언트 (브라우저) 처리 다른 일을하지 할 수 있습니다.

비동기 2.2 : 비동기 비동기 프로 시저 호출없이 결과까지 호출을 발행 할 때 동기 반면, 후속 작업이 진행될 수. 통화가 완료되면, 보통 상태, 통보 및 콜백을 통해 발신자를 알려줍니다. 비동기 호출의 경우, 호출자 컨트롤에 의해 반환되지 호출합니다.

세 가지 방법으로 발신자를 알려 들어, 같은 다음과 같습니다 :

  • 상태 : 호출자 (폴링)의 상태를 모니터링하는 호출자가 정기적으로 다시 확인해야한다는, 매우 비효율적이다.
  • 알림 : 발신자가 실행되면, 알림이 너무 많은 성능을 사용하지 않고, 발신자를 알리는.
  • 콜백 : 호 출처의 실행이 완료 될 때 통지 마찬가지로, 그것이 호출자 제공 콜백 함수를 호출한다.

예를 들어 : B / 모드 Ajax 요청을 S, 특정 프로세스는 : ​​클라이언트는 AJAX 요청을 전송한다 -> 서버 프로세스 -> 처리 실행 클라이언트 콜백 클라이언트 (브라우저)에 대한 요청이 여전히 다른 할 수 일.

2.3 동기 및 비동기 차이 : 결론적으로, 차이점은, 동기 및 비동기 : 상기 요청이 이루어진 후,하기 결과를 기다려야 할 것인지 다른 작업을 수행 계속.

3. 차단 및 비 차단 : 차단 및 메시지 통지 상태를 기다릴 때 두 개념 및 절차 (스레드)을 비 차단 (이것은 중요하지 않다 동기 또는 비동기) 관련. 프로그램 (스레드)의 각도가 메시지 통지를 대기 할 때, 즉, 메인 차단 및 비 차단 된 상태이다.

차단 및 호출 (메시지, 반환 값)의 결과를 대기하는 동안 비 차단 문제는 프로그램의 상태이다.

전화를 차단하는 호출이 반환하기 전에 결과를 참조, 현재 스레드가 일시 중단됩니다. 만 호출 스레드는 결과 끝날 때까지 반환하지 않습니다.

비 차단 호출이 즉시 결과를 얻을 수 없습니다 말합 전에, 호출은 현재 스레드를 차단하지 않습니다.

4. 동시 병렬

4.1 동시성 : 운영 체제, 기간을 의미 시작한 여러 프로그램에있는 점 완성 된 이러한 프로그램은 동일한 프로세서에서 실행되지만 언제든지 사이에 실행 실행 프로세서에서 실행되는 하나 개의 프로그램.

동작에있어서 각 스레드에 하나 개 이상의 스레드가있는 경우, 시스템은 오직 하나 개의 CPU 인 경우, 이는 단순히 둘 이상의 스레드가 아닌 동시에 사실 일 수없고, 그것은 단지 CPU 시간을 여러 구간으로 분할 할 후 기간 할당 수행은 스레드가 실행되는 코드의 기간에, 다른 스레드는 정지 상태에있다. . 이러한 방법으로 우리는 동시 (동시)로 전화하십시오.

4.2 병렬 : 시스템은 하나 개 이상의 CPU가있을 때, 이는 스레드가 아닌 동시 운전이 가능하다. 는 CPU가 스레드를 실행할 때, 다른 CPU는 두 개의 쓰레드를 다른 스레드를 실행할 수 있으며, 우리는 이러한 방식으로 병렬 전화 (병렬)을 동시에 행할 수있는 CPU 리소스를 점유하지

4.3 동시성과 병렬의 차이 :

  • 당신은 절반 식사, 전화를 먹고, 당신은 당신이 동시없는 지원과 평행을 지원하지 않는 수단, 식사 후에 선택해야합니다.
  • 당신은 절반 식사, 전화를 먹고, 당신은 전화가 다음 식사 후, 그것은 동시성에 대한 지원을 보여줍니다 계속 중지 픽업.
  • 당신은 절반 식사, 전화를 먹고,면을 먹는 동안 휴대 전화, 그것은 지원 평행을 보여줍니다.

열쇠는 당신이 동시에 반드시 동시에 여러 작업을 처리 할 수있는 능력을 가지고 있습니다. 병렬 키는 여러 작업을 처리 할 수있는 능력을 가지고 있습니다.

나는 그들이 생각하는 그래서 가장 중요한 점은 다음과 같습니다가 있는지 여부 "동시에."

비동기 및 셋째, 차이를 멀티 스레드? (원리 기사)

1. 비동기 및 차이점은 무엇입니까 멀티 스레드?

실제로 목적은 비동기이며, 멀티 스레딩은 이러한 목적을 달성하는 방법이다. A는 작업을 시작 후 비동기 평균, 우리는이에 대한 건조하지 대기를 할 자신의 이기적인 일 처리를 계속 (일반적으로 더 많은 시간이 소요되는 시간이 많이 걸리는 작업을하지 않고, 작업이 필요한 비동기되지 않습니다) 시간이 많이 소요되는 작업으로 돌아갑니다.

유사점과 차이점 2. 멀티 스레딩 및 비동기 작업

두 멀티 스레딩 및 비동기 동작함으로써 소프트웨어의 응답 성을 향상 호출 스레드를 회피 할 목적이 차단 달성 할 수있다. 때때로 우리는 심지어 멀티 스레딩 생각하고 비동기 작업은 해당하는 개념이다. 그러나, 멀티 스레딩 및 비동기 작업은 여전히 ​​약간의 차이가 있습니다. 멀티 스레딩과 비동기 동작의 무분별한 사용으로 인해 이러한 타이밍 차이.

3. 작업의 비동기 특성

모든 프로그램은 결국 더 나은 비동기 작업의 성격을 이해하기 때문에 위해, 컴퓨터 하드웨어에서 실행됩니다, 우리는 기반 하드웨어 볼 필요가있다. 컴퓨터 하드웨어 DMA를 확실히 친구 단어, 하드 디스크없이 낯선 사람을 잘 알고는, CD-ROM 기술 사양은 사실, 네트워크 카드, 사운드 카드, 그래픽 카드는 또한 DMA 기능이며, 명확한 지표의 DMA 모드가 있습니다.

DMA는 즉, 하드웨어 CPU 리소스를 소모하지 수있는 데이터의 교환에 시간 및 메모리의 DMA 기능을 가지고, 직접 메모리 액세스 수단이다. 전송이 완료 하드웨어 트리거를 완료 동작을 알리는 인터럽트 후에만큼 CPU가 데이터 전송의 개시에 명령을 전송으로, 과거 데이터를 자신의 하드웨어 및 메모리를 시작했다. 이 필요없는 CPU 시간 I / O 작업을 하드웨어 기반의 비동기 작업입니다 소모한다. 비록 이러한 시스템 DOS (프로세스 개념 및 무선)와 같은 단일 공정에서 비동기 DMA 동작을 개시 할 수있다.

스레드 4. 성격

나사는 컴퓨터 하드웨어의 기능이 아니라 쓰레드가 실행 및 예약하는 운영 체제의 CPU 자원을 투자 할 필요가 있도록 운영 체제의 논리적 기능은 스레드는, 본질적으로 동시에 실행에 대한 코드의 과정이다.

장점과 비동기 작업의 단점

추가 스레드 부담없이 비동기 작업, 그리고 치료에 대한 콜백 방식을 사용하기 때문에, 잘 설계된에서, 죽은 감소 핸들러 (완전하지하지 않을 경우 적어도 당신은 공유 변수의 수를 줄일 수 있습니다) 공유 변수를 사용 할 수 없습니다 가능 잠급니다. 물론, 비동기 작업은 완벽하지 않습니다. 프로그램은 주로 보통 사람들의 사고 방식을 처리하는 콜백 방식을 사용하는 비동기 작업을 작성하는 높은 복잡성은 디버그에 약간의 차이, 그리고 어렵다.

6. 장점과 멀티 스레드의 단점

프로그램은 간단하므로 분명히 멀티 스레딩의 장점은 스레드 핸들러는, 마음의 평범한 사람들의 습관에 맞춰, 아직 실행 순서입니다. 그러나 멀티 스레드 단점도 분명, 문맥의 추가 부담이 사용하는 스레드 (남용) 시스템을 줄 것이다 전환됩니다. 그리고 스레드 간의 공유 변수는 교착 될 수 있습니다.

비동기 및 멀티 스레드 비동기보기 및 멀티 스레딩의 변증 관계의 관점에서, 동일한 관계없고, 용도는 다중 스레드, 비동기하지만 비동기 달성하는 수단을 갖는다. 비동기 무엇 : 비동기 호출 요청이 호출자에게 보낼 때 반환, 그러나 그들의 결과를 기다리지 않고 호출된다. 비동기 멀티 스레딩 기술을 사용하거나 다른 프로세스를 처리 할 수있다. 확장 : 멀티 스레딩 기술 자료 시스템 목록

네 번째로, 비동기 멀티 스레드 병렬 차이점

예 : 도시는 기차, 도체 1 분에 대해 생각하고 기차 티켓을 구입하기로 결정 할 필요가 있음을 이제 가정하는 도체 상담 후 각 승객.

1. 비동기 : 티켓을 구입하는 사람들을 상담 한 후, 필요 물러나 즉시 1 분에 대해 생각하는,하지만 당신은 명확하게 생각하는 티켓을 구입 가서 즉시 도체 이야기 할 수있을 때, 다시 정렬되지 않습니다. 시간 옆에 서있는 사람의 생각에서, 당시 사람들까지 구입 돌진했다. 이 시간은 팀은 매우 빠른 도체의 효율성을 극대화하기 위해, 방해없이 움직이고있다.

2. 멀티 스레딩 : 역 N 열려있는 창 (하지만 여전히 하나의 티켓), 도체 응답 질문 질문 후 행 n은 팀의 외부는, 말은 다음 창을 서서하고 다음 창으로 계속 회전하면서 .... 사람들이 윈도우가 좋은 결정. 도체 그를 위해 구입 과거 날아 갔다. 팀이 비극에 사람들 뒤에 얽힌 오랜 시간 동안 생각하는 경우이 시간은 승객이 비교적 간단하지만.

3. 병렬 : 매수 N 역은 동시에 티켓 판매에서, 티켓을 크게 향상. 우리는 또한 몇 사람들이 티켓을 구입 갔다 기차역 수 있습니다.

4. 표시 : 그냥 기차역 및 케이스의 도체에서는 다음 판매 자원, 비 효율성의 낭비로 이어질 것입니다 판매, 팀은 붙어, 앞으로 이동하기가 어렵습니다. 낮은 티켓 판매의 문제를 이동하지 않습니다 팀의 모두를 해결하는 방법을 1,2 최적화. 그러나 역 증가는 도체를 높일 수있는 좋은 방법입니다, 창을 높일 수 있습니다. 확장 : 멀티 스레딩 기술 자료 시스템 목록

5. 결론 :

1. 사실, 비동기 및 많은 사람들이 얽힌 때가는 5 분 대신에 1 분을 보낼 예정이 있지만 효율은 거의 아니지만 많은 열려있는 창은, 예를 들어 세를 들어, 멀티 스레드의 효율성이 실제로 비동기보다 낮은 멀티 스레드, 도체 때문에 또는 일반적으로 세 번 발생하는 동안 티켓을 위해 대기 할 수없는 복잡하게 얽힌에 붙어.

2. 이러한 두 가지의 개념은 개념이 없기 때문에, 부적절한 비트를 대조하는 데, 또는 멀티 스레드 비동기 멀티 스레드 비동기의 목적으로 달성하기위한 수단이 될 것이다. 비동기 동기화는 내 아들을 비교하는 얘기를해야한다.

3. 멀티 스레딩은 비교적 간단하지만 추가 창, 비용 증가가 필요하며,이 유사한 아파치 PHP 및 노드 아래에있는 최악의 지휘자였다. 다음 관계 자바 스크립트 JS는이 멀티 스레드이지만 차단되며, 다른 하나는 단일 스레드 비동기 비 차단된다. 보다 전통적인 생각과 일치 PHP 프로그램,하지만 비용 메모리 노드입니다. JS 적은 리소스가 같은 작업을 수행 할 수있을 것으로, 비 차단하지만, 프로그래밍 혼란.

4. 병행하여, 멀티 코어 CPU의 각 코어의 사용은 유사한 계산있다. 의사 복잡로 나눌 수 동시, 정말 복잡. 전자는, 예를 들어, 동시 단일 코어 프로세서, 다중 코어 프로세서의 동시 발전을 의미한다.

5. 각 핵심을 최대한 활용할 수 있도록 궁극적 인 방법은, 각 CPU에서 계산 평행 및 비동기 계산합니다. 그러나 프로그래밍 요구가 높다 너무 높게하지 집약적 연산의 경우, 예컨대 큰 유한 요소법 (사용 이상의 동시) 또는 액세스 서버 동시에 가공 천 (또는 사용 이상의 비동기 멀티 스레딩) 아니면 정직하다 전통적인 방법은, 결국, 하드웨어의 계산 루틴 절차의 양 지금, 문제는 크지 않다. 확장 : 멀티 스레딩 기술 자료 시스템 목록

다섯째는, 논 블로킹 비동기 및 동기 차이를 차단? (스토리 파트)

동기 차단 이해, 비동기, 비 차단 비동기 차단, 동기, 비동기 차단을 비 차단

동기 / 비동기 메시지 통지기구 관계 및 차단 / 비 차단 우려가 메시지 통지를 기다리는 프로그램 (스레드)의 상태이다.

샤오 밍은 다운로드 파일 비유로,이 두 포커스 그룹 모두의 더 나은 이해를 증진하기를 바라고, 다시 개념을 설명합니다.

1. 동기 차단 : 샤오 밍이 완료되는 시간의 100 % 다운로드 progress bar를 응시하고있다.

  • 동기화가에 반영됩니다 : 다운로드를위한 대기가 완료 통지입니다;
  • 당신은 다른 처리 작업을 수행 할 수 없습니다 알림 프로세스를 완료 할 수있는 다운로드 대기;에 반영 블로킹

2. 비 차단 동기화 : 샤오 밍 다운로드 작업을 제출 한 후 한 번 모든 A는 진행 표시 줄에서 눈에 이동하는 동안, 100 % 완료를보고, 그렇지 않으면 할 수 있습니다.

  • 동기화가에 반영됩니다 : 다운로드를위한 대기 완료 통지, 그러나에있을;
  • 비는 블로킹에 반영 : 알림 프로세스를, 다운로드가 완료 될 때까지 기다리 작업이 진행 표시 줄에서 가끔 눈을 달리 할 만합니다 [샤오밍의 필요성을 작업 사이를 전환, 다운로드 진행 상황에 대해 우려]

3. 비동기 차단 : 샤오 밍 소프트웨어의 다운로드 완료 알림 기능을 변경, 다운로드는 "땡"소리에 완료됩니다. 그러나 샤오 밍은 여전히 ​​(그 바보 외모하지 않습니다) "땡"소리를 기다리고.

  • 다운로드가 완료 "땡"소리 알림입니다 : 비동기에 반영
  • 에 반영 블로킹 :은 "물린"절차를 완료 할 수있는 다운로드 곧 통지 대기, 다른 처리 작업을 수행 할 수 없습니다;

4. 비동기 비 차단 : 것 "땡"소리, 그리고 샤오 명나라 다운로드 작업의 제출 후 "땡"소리를 듣고, 그렇지 않으면 할 여전히 소프트웨어를 다운로드가 완료 알고 있습니다.

  • 다운로드가 완료 "땡"소리 알림입니다 : 비동기에 반영
  • 비는 블로킹에 반영 : 다운로드가 "땡"소리 알림 프로세스를 완료 할 때까지 기다립니다, 작업이 다르게 수행에만 알리기 위해 "땡"소리를 받아야하는 [다운로드 소프트웨어 처리 작업, 샤오 밍은 진행에주의하지 않고, 다른 작업을 처리하기 위해, 단순히 소리 알림을 소프트웨어 "땡"수신]

즉, 동기 / 비동기 다른에서, 방법 (메커니즘) 알림 프로세스 (다른 작업을 할 수 없다) "를 다운로드 완료 메시지를"통지 "전체 메시지 다운로드"및 차단 / 비 차단이 대기 상태에있다 / 비 차단을 차단 시나리오, 동기식 / 비동기식 네 개의 조합이 적용된다.

그래서, 요약하기, 동기 및 비동기 메커니즘은 어떻게 메시지 알림에 대해 우려하고, 차단 및 비 차단 우려하는 메시지 알림 대기 상태입니다 있습니다. 메시지가 트리거되는 경우 즉, 경우에보고 메시지 대기 스스로 처리 사용자에 의해 동기 한 경우는 그 메시지를 처리하기 위해 비동기 통지 메커니즘 때문에 비동기 메커니즘, 메시지가 처리되고, 트리거 메카니즘에 의해 트리거 된 간은 연결을 연결해야합니다 :

밥의 경우,이 다리는 소프트웨어 "땡"소리입니다.

/ 동기 비동기 및 차단 / 비 차단

1 개 동기 차단 양식

효율은 최저

위의 예를 가지고, 그것은 다운로드가 완료를 위해 다른 작업을 수행하지 않는 대기를 집중한다는 것이다.

실제 프로그램 : O_NONBLOCK 읽을 수는 플래그 FD / 쓰기 작업으로 설정되어 있지 않습니다;

2 비동기 차단 양식

비동기 작업은 실시간으로 차단 될 수 있지만, 메시지를 처리하는 동안은 차단되지 않지만 통지를 기다리는 동안 메시지가 차단됩니다.

마지막 시간 제한 매개 변수에 전달 된 경우 예를 들어, 기능을 선택, NULL은 다음 이벤트가 트리거 경우, 프로그램이 선택 호출이 곳에서 차단 된 문제가되지 않습니다.

3 동기 비 블록 형

사실 비효율적에서,

뭔가 다른 일을하고 두 운영 절차로 다운로드 위치의 완료를 관찰하는 것은,이 프로그램은 두 개의 서로 다른 행동을 필요로하는 경우 당신이 다른 일을하면서 아직 다운로드를 찾아 볼 필요는 없지만 상상은 완료 전후의 전환 효율이 낮은 상상.

많은 사람들이 읽기 / 쓰기 작업을 차단 쓸 것입니다,하지만 당신은 당신이 작업을 동기화 할 수 있도록, FD에 O_NONBLOCK 플래그를 설정할 수 있습니다 잊지 마세요 비 블로킹된다.

4 비동기 형 비 차단

높은 효율,

당신이 다운로드 대기 때문에 완전한 (웨이터) 일, 당신은 프로그램 앞뒤로 두 개의 서로 다른 작업에서 전환되지 않습니다, 컴퓨터 (메시지 트리거 메커니즘) 일입니다 알 수 있습니다.

지금까지 프로세스 스레드, 동기 비동기에 대한 동시 병렬 그것에 대해 얘기를 해왔습니다 차단 비 차단, 만족 족장 말했다 나쁜 장소의 이야기가있다. 감사합니다, 오빠는 온라인 문서는 이러한 개념을 이해하는 나에게 도움이됩니다.

여섯째, 단부 (기타 물품의 큰 신 참조 이상)

항상 믿음을 유지!

게시 된 122 개 원래 기사 · 원 찬양 64 ·은 50000 +를 볼

추천

출처blog.csdn.net/chenmingxu438521/article/details/104200208