TIL
-
Python GILTIL 2024. 1. 3. 00:59
파이썬의 표준 구현체로 C언어로 작성된 Cpython이 있다. Cpython은 두 단계를 거쳐서 파이썬 프로그램을 실행한다. 소스 코드 구문 분석과 바이트 코드 변환: 파이썬 소스 코드는 먼저 구문 분석 과정을 거쳐 추상 구문 트리(Abstract Syntax Tree, AST)로 변환된다. 그 후, 이 AST는 파이썬의 중간 표현인 '바이트 코드'로 변환된다. 바이트 코드는 기계어가 아닌, 파이썬 가상 머신이 이해할 수 있는 형태의 코드다. 스택 기반 인터프리터 실행: 변환된 바이트 코드는 스택 기반의 인터프리터를 통해 실행된다. 스택 기반 인터프리터는 명령어를 수행하기 위해 데이터를 스택에 저장하고, 이를 순차적으로 처리한다. 바이트 코드 인터프리터에는 파이썬 프로그램이 실행되는 동안 일관성 있게 유..
-
스레드를 많이 사용할 수록 성능이 증가할까?TIL 2024. 1. 2. 23:58
스레드를 많이 쓸수록 성능이 높아질까? 스레드는 프로세스 내에 존재하는 실행 단위이고, 멀티 스레드를 통해 음악을 들으면서 웹서핑을 하는 동시 작업이 가능하다. 스레드가 많을수록 동시에 처리할 수 있는 작업의 개수가 증가하는 것이기 때문에 멀티 스레드가 무조건 성능이 더 좋다고 생각하게 된다. 그러나 모든 상황에서 무조건 멀티 스레드가 싱글 스레드보다 좋다고 할 수는 없다. 1. 임계 영역에 대한 동기화 비용 멀티 스레드는 자원(전역 변수, heap 메모리 영역)을 공유하기 때문에 프로세스 생성에 비해 적은 메모리와 자원을 소모하고, 컨텍스트 스위칭도 프로세스보다 빠르다. 하지만 여러 개의 스레드가 임계 영역의 공유 자원에 접근할 수 있기 때문에, 데이터의 일관성과 정확성을 유지하기 위해 동기화 기법을 ..
-
멀티 프로세스 vs 멀티 스레드TIL 2024. 1. 2. 16:22
멀티 프로세스와 멀티 스레드는 한 애플리케이션에 대한 처리방식이다. 단순히 프로그램을 여러개 띄워놓는 것이 아니라, 언제 어느 때에 어느 방식으로 애플리케이션을 처리하느냐에 따라 다른 것으로 이해해야 한다. 단일이 아닌 여러 개의 프로세스, 스레드가 다중으로 돌아감으로써 성능 향상 등 여러가지 효과를 얻을 수 있다. 하지만 이로 인한 여러 부가적인 문제점도 발생하게 된다. 멀티 프로세스 운영체제에서 하나의 응용 프로그램에 대해서 동시에 여러 개의 프로세스를 실행할 수 있게 하는 기술이다. 하나의 프로그램 실행에 대해 하나의 프로세스가 메모리에 생성되지만, 부가적인 기능을 위해 여러 개의 프로세스를 생성하는 것이다. 멀티 프로세스 내부를 보면, 하나의 부모 프로세스가 여러 개의 자식 프로세스를 생성한다. ..
-
Thread & Process - 2TIL 2023. 12. 28. 01:45
프로세스 & 스레드의 생명 주기 프로세스와 스레드는 각각의 생명 주기를 가진다. 운영체제는 이 생명 주기를 관리하고 프로세스와 스레드를 조정해서 시스템 자원을 효율적으로 사용할 수 있게 된다. 프로세스 스케쥴링 운영체제에서 CPU를 사용할 수 있는 프로세스를 선택하고, CPU를 할당하는 작업이다. 프로세스의 우선순위, 작업량 등을 고려해서 효율적으로 배치한다. 이를 통해 운영체제는 효율적으로 CPU를 사용해서 시스템 전반적인 성능을 향상시킨다. 스케쥴링은 운영체제의 특징과 시스템 요구사항에 따라 여러 알고리즘 방식으로 동작된다. FCFC(First-Come, First-Served), SJF(Shortest-Job-First)등이 있다. 프로세스 상태 프로세스의 상태는 프로세스가 실행되는 동안 변경되는 ..
-
Docker로 개발환경을 구축하는 이유TIL 2023. 12. 27. 11:13
프로젝트를 제작하면서 개인 로컬 환경에서 모든 플랫폼을 직접 설치해 코드 작성 및 테스트를 진행하고 문제가 없어 외부 서버에 배포를 하게 된다고 가정해보자. 배포 환경과 개발 환경의 차이로 인해 발생할 수 있는 문제점은 개발 환경에서 제어할 수 없고 예측하기 힘들다. 이러한 문제를 해결하기 위해서는 어플리케이션 구성을 위한 여러 플랫폼의 종류나 버전이 항상 동일하게 유지되고 수정될 수 있도록 독립적인 개발 및 배포 환경이 필요하다. 1. 일관된 개발 환경 한 컴퓨터에서 여러가지 개발 환경을 구축하다 보면 해당 개발 환경끼리 충돌하는 경우가 생길 수 있음. ex) 어떤 프로젝트 A는 python 3.8을 사용하고 어떤 프로젝트는 python 3.11 버전을 사용할 수 있다. 이렇게 되면 프로젝트 별로 py..
-
Thread & Process - 1TIL 2023. 12. 27. 04:55
프로세스와 스레드 개념 프로세스와 스레드에 대한 개념을 이해하기 쉽게 설명하면 다음과 같다: 프로세스 : 운영체제로부터 필요한 자원(메모리, CPU 시간 등)을 할당받아 작동하는, 독립적인 작업의 단위 스레드 (Thread): 프로세스 내에서 프로세스가 할당받은 자원을 사용하는 개별적인 실행 흐름의 단위 프로그램과 프로세스 정적 프로그램 프로그램은 실행 가능한 파일의 형태로 존재하는 코드의 집합이다. 예를 들어, 윈도우의 .exe 파일과 같은 형태로 저장되며, 아직 실행되지 않은 상태다. 프로세스 프로그램이 실행되면 프로세스가 됩니다. 이는 운영체제로부터 메모리와 CPU 자원을 할당받아 동적으로 실행되는 프로그램의 인스턴스다. 같은 프로그램이라도 여러 프로세스로 실행될 수 있다. 모든 프로그램은 운영체제..
-
set 자료구조를 활용하여 조건 검사 속도 최적화 - 리트코드 345TIL 2023. 12. 18. 23:51
https://daelkdev.tistory.com/43 리트코드 - 345. Reverse Vowels of a String https://leetcode.com/problems/reverse-vowels-of-a-string/description/ Reverse Vowels of a String - LeetCode Can you solve this real interview question? Reverse Vowels of a String - Given a string s, reverse only all the vowels in the string and return it. daelkdev.tistory.com class Solution: def reverseVowels(self, s: str) ->..