Python의 동시성-소개
이 장에서는 Python의 동시성 개념을 이해하고 다양한 스레드와 프로세스에 대해 알아 봅니다.
동시성이란 무엇입니까?
간단히 말해서 동시성은 두 개 이상의 이벤트가 동시에 발생하는 것입니다. 동시성은 주어진 시간에 많은 이벤트가 동시에 발생하기 때문에 자연스러운 현상입니다.
프로그래밍 측면에서 동시성은 실행에서 두 작업이 겹치는 경우입니다. 동시 프로그래밍을 사용하면 이전 요청이 완료 될 때까지 기다리지 않고 요청을 동시에 처리 할 수 있으므로 응용 프로그램 및 소프트웨어 시스템의 성능이 향상 될 수 있습니다.
동시성에 대한 기록 검토
다음 요점은 동시성에 대한 간략한 역사적 검토를 제공합니다.
철도의 개념에서
동시성은 철도의 개념과 밀접한 관련이 있습니다. 철도의 경우 모든 열차가 목적지까지 안전하게 도착할 수 있도록 동일한 철도 시스템에서 여러 열차를 처리 할 필요가있었습니다.
학계에서의 동시 컴퓨팅
컴퓨터 과학 동시성에 대한 관심은 1965 년 Edsger W. Dijkstra가 발표 한 연구 논문에서 시작되었습니다.이 논문에서 그는 동시성 제어의 속성 인 상호 배제 문제를 식별하고 해결했습니다.
높은 수준의 동시성 프리미티브
최근 프로그래머들은 높은 수준의 동시성 프리미티브의 도입으로 인해 향상된 동시 솔루션을 얻고 있습니다.
프로그래밍 언어와의 동시성 향상
Google의 Golang, Rust 및 Python과 같은 프로그래밍 언어는 더 나은 동시 솔루션을 얻는 데 도움이되는 분야에서 놀라운 발전을 이루었습니다.
스레드 및 멀티 스레딩이란 무엇입니까?
Thread운영 체제에서 수행 할 수있는 가장 작은 실행 단위입니다. 그 자체는 프로그램이 아니라 프로그램 내에서 실행됩니다. 즉, 스레드는 서로 독립적이지 않습니다. 각 스레드는 다른 스레드와 코드 섹션, 데이터 섹션 등을 공유합니다. 경량 프로세스라고도합니다.
스레드는 다음 구성 요소로 구성됩니다.
다음 실행 가능한 명령어의 주소로 구성된 프로그램 카운터
Stack
레지스터 세트
고유 ID
Multithreading반면에 여러 스레드를 동시에 실행하여 운영 체제 사용을 관리하는 CPU의 기능입니다. 멀티 스레딩의 주요 아이디어는 프로세스를 여러 스레드로 분할하여 병렬화를 달성하는 것입니다. 멀티 스레딩의 개념은 다음 예제를 통해 이해할 수 있습니다.
예
MS Word를 열어 내용을 입력하는 특정 프로세스를 실행하고 있다고 가정합니다. MS Word를 열려면 스레드 하나가 할당되고 내용을 입력하려면 다른 스레드가 필요합니다. 이제 기존 항목을 편집하려면 편집 작업을 수행하는 데 다른 스레드가 필요합니다.
프로세스 및 다중 처리 란 무엇입니까?
ㅏprocess시스템에서 구현할 기본 작업 단위를 나타내는 엔티티로 정의됩니다. 간단히 말해서 컴퓨터 프로그램을 텍스트 파일로 작성하고이 프로그램을 실행하면 프로그램에서 언급 한 모든 작업을 수행하는 프로세스가됩니다. 프로세스 수명주기 동안 시작, 준비, 실행, 대기 및 종료와 같은 여러 단계를 거칩니다.
다음 다이어그램은 프로세스의 여러 단계를 보여줍니다.
프로세스에는 기본 스레드라고하는 하나의 스레드 만 있거나 자체 레지스터 세트, 프로그램 카운터 및 스택이있는 여러 스레드가있을 수 있습니다. 다음 다이어그램은 차이점을 보여줍니다.
Multiprocessing,반면에 단일 컴퓨터 시스템 내에서 두 개 이상의 CPU 장치를 사용하는 것입니다. 우리의 주요 목표는 하드웨어에서 최대한의 잠재력을 얻는 것입니다. 이를 위해서는 컴퓨터 시스템에서 사용할 수있는 전체 CPU 코어 수를 활용해야합니다. 다중 처리는이를위한 최선의 방법입니다.
Python은 가장 인기있는 프로그래밍 언어 중 하나입니다. 다음은 동시 응용 프로그램에 적합한 몇 가지 이유입니다.
구문 설탕
Syntactic sugar는 사물을 더 쉽게 읽고 표현할 수 있도록 설계된 프로그래밍 언어 내의 구문입니다. 그것은 인간이 사용하기 위해 언어를 "더 달콤하게"만듭니다. 사물을 더 명확하고 간결하게 표현하거나 선호도에 따라 다른 스타일로 표현할 수 있습니다. Python에는 객체에 대해 작동하도록 정의 할 수있는 Magic 메서드가 제공됩니다. 이러한 Magic 방법은 구문 설탕으로 사용되며 더 이해하기 쉬운 키워드에 묶여 있습니다.
대규모 커뮤니티
Python 언어는 AI, 기계 학습, 딥 러닝 및 정량 분석 분야에서 일하는 데이터 과학자와 수학자 사이에서 엄청난 채택률을 보였습니다.
동시 프로그래밍에 유용한 API
Python 2와 3에는 병렬 / 동시 프로그래밍 전용 API가 많이 있습니다. 가장 인기있는 것은threading, concurrent.features, multiprocessing, asyncio, gevent and greenlets, 기타
동시 애플리케이션 구현시 Python의 한계
Python에는 동시 애플리케이션에 대한 제한이 있습니다. 이 제한을GIL (Global Interpreter Lock)Python 내에 있습니다. GIL은 결코 다중 CPU 코어를 사용하도록 허용하지 않으므로 Python에는 진정한 스레드가 없다고 말할 수 있습니다. 다음과 같이 GIL의 개념을 이해할 수 있습니다.
GIL (Global Interpreter Lock)
파이썬 세계에서 가장 논란이 많은 주제 중 하나입니다. CPython에서 GIL은 상호 배제 잠금 인 뮤텍스 (mutex)로 스레드를 안전하게 만듭니다. 즉, GIL이 여러 스레드가 Python 코드를 병렬로 실행하는 것을 방지한다고 말할 수 있습니다. 잠금은 한 번에 하나의 스레드 만 보유 할 수 있으며 스레드를 실행하려면 먼저 잠금을 획득해야합니다. 아래 다이어그램은 GIL의 작동을 이해하는 데 도움이됩니다.
그러나 Python에는 다음과 같은 일부 라이브러리 및 구현이 있습니다. Numpy, Jpython 과 IronPytbhon. 이러한 라이브러리는 GIL과의 상호 작용없이 작동합니다.