본 포스팅은 기술 면접 대비 CS 전공 핵심요약집 기반 포스팅입니다.
* 2차원 배열에서 데이터에 접근할 때 행 우선 접근과 열 우선 접근에 따라 실행 속도 차이가 발생한다. 이는 행 우선 접근이 연속적으로 데이터를 읽기 때문에 캐시 미스가 덜 발생하기 때문이다.
import numpy as np
import time
n = 10000
data = np.random.rand(n, n) # n x n 배열 생성
start_time = time.time()
row_sum = 0
for i in range(n):
for j in range(n):
row_sum += data[i][j] # 행 우선 접근
row_access_time = time.time() - start_time
start_time = time.time()
col_sum = 0
for i in range(n):
for j in range(n):
col_sum += data[j][i] # 열 우선 접근
col_access_time = time.time() - start_time
print(f"row_sum: {row_sum}, 행 우선 접근 시간: {row_access_time}초")
print(f"col_sum: {col_sum}, 열 우선 접근 시간: {col_access_time}초")
row_sum: 50004354.466031946, 행 우선 접근 시간: 16.925222158432007초
row_sum: 50004354.46602755, 행 우선 접근 시간: 17.36072301864624초
row_sum: 50002470.00757994, 행 우선 접근 시간: 18.837072134017944초
col_sum: 50002470.007534936, 열 우선 접근 시간: 19.26168394088745초
시간 차이가 별로 안나는 이유
kernel: OS 핵심 요소로 HW/프로세스(SW) 보안, 자원 관리, 하드웨어 추상화 역할을 수행함, CPU 스케줄링, 메모리 관리, 입출력 관리, 파일 시스템 관리 등을 담당한다.
kernel mode: 리소스에 직접 접근 가능 → 메모리, CPU 자원 사용 가능
user mode: 리소스에 직접 접근 불가능
user mode에서 실행된 프로세스가 리소스에 접근하기 위해서는 시스템 콜을 호출해야 함
시스템 콜로 프로세스 제어, 파일 관리, 장치 관리, 데이터 유지/보수, 통신, 보호가 가능하다.
import subprocess
# macOS/Linux: clear 후 실행할 것
# cwd의 파일, 디렉토리 리스트 출력
result = subprocess.run(['ls', '-l'], capture_output=True, text=True)
print("stdout:", result.stdout)
print("stderr:", result.stderr)
# google.com 핑 테스트
proc = subprocess.Popen(['ping', '-c 4', 'google.com'], stdout=subprocess.PIPE, stderr=subprocess.PIPE)
stdout, stderr = proc.communicate()
print("stdout:", stdout.decode())
print("stderr:", stderr.decode())
stdout: total 16
-rw-r--r-- 1 chan staff 651 Mar 23 13:54 README.md
drwxr-xr-x 6 chan staff 192 Mar 26 15:36 cs_study
drwxr-xr-x 5 chan staff 160 Mar 26 16:18 gamchan
-rw-r--r-- 1 chan staff 14 Mar 26 15:37 requirements.txt
drwxr-xr-x 3 chan staff 96 Mar 23 13:41 src
stderr:
stdout: PING google.com (142.250.204.142): 56 data bytes
64 bytes from 142.250.204.142: icmp_seq=0 ttl=112 time=41.118 ms
64 bytes from 142.250.204.142: icmp_seq=1 ttl=112 time=86.891 ms
64 bytes from 142.250.204.142: icmp_seq=2 ttl=112 time=47.206 ms
64 bytes from 142.250.204.142: icmp_seq=3 ttl=112 time=42.658 ms
--- google.com ping statistics ---
4 packets transmitted, 4 packets received, 0.0% packet loss
round-trip min/avg/max/stddev = 41.118/54.468/86.891/18.853 ms
stderr: