>  기사  >  백엔드 개발  >  Java나 Python을 배우기 전에 PHP를 배웠습니까?

Java나 Python을 배우기 전에 PHP를 배웠습니까?

王林
王林원래의
2019-09-07 14:44:233953검색

Java나 Python을 배우기 전에 PHP를 배웠습니까?

Java를 배울지, Python을 배울지 고민하기 전에 둘의 응용분야에 대해 먼저 이야기해보겠습니다. ㅋㅋㅋ 고품질 2D 및 3D 이미지. 과학 컴퓨팅 분야에서 가장 널리 사용되는 상용 소프트웨어인 Matlab과 비교할 때 Python은 Matlab에서 사용하는 스크립팅 언어보다 더 넓은 범위의 응용 프로그램을 갖고 있으며 더 많은 프로그램 라이브러리에서 지원됩니다. Matlab의 많은 고급 기능과 도구 상자는 여전히 대체할 수 없지만 일상적인 과학 연구 및 개발에는 Python으로 수행할 수 있는 작업이 여전히 많이 있습니다.

2. 웹 스파이더라고도 알려진 웹 크롤러

는 빅데이터 산업에서 데이터를 얻기 위한 핵심 도구입니다. 웹 크롤러가 밤낮으로 자동으로 작동하고 인터넷에서 무료 데이터를 고도로 지능적으로 크롤링하지 않는다면 빅 데이터와 관련된 회사의 수가 4분의 3 정도 줄어들 것입니다. 웹 크롤러를 작성하는 데 사용할 수 있는 프로그래밍 언어는 많지만 Python은 확실히 주류 중 하나이며 Python의 Scripy 크롤러 프레임워크가 널리 사용됩니다.

3. 데이터 분석

대량의 데이터를 기반으로 과학적 컴퓨팅, 기계 학습 및 기타 기술이 결합된 데이터 정리, 중복 제거, 표준화 및 표적 분석은 빅 데이터 산업의 초석입니다. Python은 데이터 분석의 주류 언어 중 하나입니다.

4. 인공지능

파이썬은 인공지능이라는 넓은 분야에서 머신러닝, 신경망, 딥러닝 등의 주류 프로그래밍 언어로 널리 지원되고 적용되어 왔습니다.

Java의 주요 응용 방향:

1. 엔터프라이즈급 응용 프로그램

이것은 현재 가장 널리 사용되는 Java 분야이며 거의 독특합니다. 다양한 산업 응용, 기업 정보화, 전자 정부 등을 포함하여 사무 자동화 OA, 고객 관계 관리 CRM, HR HR, ERP ERP, 지식 관리 KM, 공급망 관리 SCM, 전사 장비 관리 등의 분야가 있습니다. 시스템 EAM, 제품 수명주기 관리 PLM, 서비스 지향 아키텍처 SOA, 비즈니스 인텔리전스 BI, 프로젝트 관리 PM, 마케팅 관리, 프로세스 관리 WorkFlow, 재무 관리... 등 여러분이 생각할 수 있는 거의 모든 애플리케이션입니다.

2. 임베디드 장치 및 가전 제품

무선 휴대용 장치, 스마트 카드, 통신 단말기, 의료 장비, 정보 가전 제품(예: 디지털 TV, 셋톱 박스, 냉장고), 자동차 전자 장비 등 인기 있는 Java 응용 프로그램 분야, 특히 Java 응용 프로그램과 휴대폰용 Java 게임이 더욱 인기를 얻고 있습니다.

다음으로 Python과 Java를 간단히 비교해 보겠습니다.

정적 언어와 동적 언어:

정적 언어

:

java, c, c++, go 등

강한 유형 언어(정적 유형 언어)는 다음을 의미합니다. 변수/객체 유형 선언에 사용되는 언어는 일반적으로 컴파일과 실행이 필요합니다. 강력한 형식의 언어는 변수의 형식이 결정되면 변환할 수 없는 언어입니다.

동적 언어

:

python, javascript, php, ruby ​​등

약한 유형 언어(동적 유형 언어)는 변수/객체 유형 선언이 필요하지 않고 일반적으로 컴파일이 필요하지 않은 언어를 말합니다. (하지만 컴파일된 것도 있습니다). 동적 유형 언어는 런타임 시 데이터 유형이 결정되는 언어입니다. 변수를 사용하기 전에는 유형 선언이 필요하지 않습니다. 일반적으로 변수의 유형은 해당 변수가 할당된 값의 유형입니다. 약한 유형의 언어는 이와 반대로 변수의 유형은 애플리케이션 컨텍스트에 따라 결정됩니다.

정적 언어의 장점

:

IDE는 필수 유형 선언으로 인해 강력한 코드 인식 기능을 갖추고 있으므로 복잡한 비즈니스 로직을 구현하고 대규모 상용 시스템을 개발하며 수명 주기가 긴 애플리케이션을 개발하는 데 유용합니다. , 시스템 개발을 보장하기 위해 IDE에 의존
정적 언어는 상대적으로 폐쇄적이기 때문에 코드에 대한 타사 개발 패키지의 침입을 최소화할 수 있습니다.

동적 언어의 장점

: 정적 언어의 몇 가지 장점 Java에서의 Reflection이나 Reflection을 기반으로 한 AOP와 같은 고급 개념은 Java 초보자나 실무 경험이 1~2년밖에 되지 않은 사람들에게는 스스로 구현하는 방법은커녕 이해하기 어렵습니다. AOP를 사용해 본 적이 있다면 이러한 개념을 능숙하게 이해하고 사용하는 것이 어렵고 개발 효율성도 상대적으로 낮다는 것을 이해하게 될 것입니다. 학생들이 "실제로는 사용하기가 매우 간단합니다"라고 말할 수도 있습니다. 동적 언어에서 데코레이터를 사용한 적이 없습니다.

동적 언어에서 Java의 AOP 개념은 데코레이터를 사용하여 직접 완성할 수 있으며 Python 언어 자체의 일부입니다. 완료하려면 제3자의 도입이 필요한 Java와는 다릅니다.


Python은 동적 언어이기 때문에 이러한 작업을 쉽게 수행할 수 있습니다. 동적 언어의 특성으로 인해 누구나 전체 클래스의 초기화를 제어하고 객체를 동적으로 변경할 수 있습니다. 이러한 특성은 동적 언어의 유연성을 훨씬 더 높여줍니다. 정적 언어 그 이상입니다.

해석 및 컴파일된 언어

여기서 해석 실행은 컴파일 실행과 관련이 있습니다. 우리 모두는 C/C++와 같은 컴파일된 언어로 작성된 프로그램이 소스 파일을 컴퓨터에서 사용하는 기계어로 변환한 다음 링커를 통해 연결하여 바이너리 실행 파일을 형성해야 한다는 것을 알고 있습니다. 이 프로그램을 실행하면 하드 디스크의 바이너리 프로그램을 메모리로 로드하여 실행할 수 있습니다.

파이썬의 실행 과정은 자바와 유사합니다:
파이썬 인터프리터는 소스 코드를 바이트코드로 변환한 후, 이 바이트코드를 파이썬 인터프리터가 실행합니다.

특정 파이썬 프로그램 실행 과정 :

- 파이썬 프로그램을 실행한 후 파이썬 인터프리터가 시작되고, 이어서 파이썬 프로그램이 실행됩니다. 바이트코드 객체 PyCodeObject로 컴파일됩니다.

- 런타임 중에는 컴파일 결과인 PyCodeObject 객체가 메모리에만 존재하게 되며, 이 모듈의 Python 코드가 실행되면 컴파일 결과가 pyc 파일에 저장됩니다. 다음에 컴파일할 필요 없이 메모리에 직접 로드하기만 하면 됩니다. pyc 파일은 디스크에 있는 PyCodeObject 객체를 표현한 것일 뿐입니다.

- 이 PyCodeObject 객체에는 문자열, Python 소스 코드의 상수 값, 구문 분석 및 컴파일을 통해 생성된 바이트코드 지침이 포함되어 있습니다. PyCodeObject 객체는 또한 이러한 바이트코드 명령어와 원래 코드 줄 번호 사이의 대응 관계를 저장하므로 예외가 발생할 때 어떤 코드 줄이 있는지 나타낼 수 있습니다.

Java도 먼저 바이트코드로 컴파일한 후
인터프리터에서 실행합니다. Java는 매우 특별합니다. Java는 컴파일이 필요하지만 직접 기계어로 컴파일하는 것이 아닙니다. 바이트코드로 변환한 다음 Java 가상 머신에서 해석된 방식으로 바이트코드를 실행합니다. Python도 비슷한 접근 방식을 사용합니다. Python은 먼저 Python 바이트 코드로 컴파일된 다음 특수 Python 바이트 코드 인터프리터가 바이트 코드를 해석하고 실행합니다.

GIL in Python

GIL의 전체 이름은 Global Interpreter Lock(글로벌 인터프리터 잠금)입니다. 소스는 처음에 고려사항입니다. 데이터 보안을 위한 결정.

Python 멀티스레딩에서 각 스레드의 실행 방법은 다음과 같습니다.
1. Get GIL
2. 절전 모드 또는 Python 가상 머신이 일시 중지할 때까지 코드를 실행합니다.
3. GIL 해제

스레드를 실행하려면 먼저 GIL을 가져와야 한다는 것을 알 수 있습니다. Python 프로세스, GIL은 하나만 있습니다. 패스를 얻을 수 없는 스레드는 실행을 위해 CPU에 들어갈 수 없습니다.
GIL 잠금이 해제될 때마다 스레드는 잠금을 놓고 경쟁하고 스레드를 전환하므로 리소스가 소모됩니다. 그리고 GIL 잠금으로 인해 Python의 프로세스는 동시에 하나의 스레드만 실행할 수 있습니다(GIL을 획득한 스레드는 실행할 수 있음). 이것이 Python의 멀티 스레딩 효율성이 멀티 코어 CPU에서 높지 않은 이유입니다.
각 프로세스는 독립적인 GIL을 가지며 서로 간섭하지 않으므로 진정한 의미에서 병렬로 실행될 수 있습니다. 따라서 Python에서는 멀티 프로세스의 실행 효율성이 멀티 프로세스보다 좋습니다. -스레딩(멀티코어 CPU에만 해당)

GIL의 존재로 인해 Python의 멀티 스레드 성능은 매우 낮고 멀티 코어 CPU를 활용할 수 없으며 성능은 싱글 스레드보다 훨씬 나쁩니다. 따라서 멀티 코어 CPU를 사용하려면 멀티 프로세스나 코루틴을 사용하는 것이 좋습니다.

Python Garbage Collection

가비지 수집에 대해 이야기할 때 가장 직관적인 참조 계산 모델이 일반적으로 사용됩니다. 수집 기술. Python도 참조 카운팅을 사용하지만 참조 카운팅에는 다음과 같은 단점이 있습니다.

1. 참조 카운트를 자주 업데이트하면 운영 효율성이 저하됩니다.

2 참조 카운팅은 순환 문제를 해결할 수 없습니다. 참조

참조 계산 메커니즘을 기반으로 Python은 주류 가비지 수집 기술에서 표시 지우기 및 세대별 수집 기술을 사용합니다.

위 내용은 참고용입니다!

권장 Python 비디오 튜토리얼: python 비디오 튜토리얼

권장 Java 비디오 튜토리얼: JAVA 비디오 튜토리얼#🎜 🎜#

위 내용은 Java나 Python을 배우기 전에 PHP를 배웠습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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