분류 전체보기 14

표준 I/O 라이브러리의 등장 배경: 시스템 콜 성능 최적화

1. 서론시스템 프로그래밍 수업을 통해 표준 I/O 라이브러리의 등장 배경을 학습하게 되었다. 이는 시스템 콜을 직접적으로 사용할 때 발생하는 성능 저하를 개선하기 위함이다. 이 문제의 원인을 깊이 이해하면 데이터베이스 등 다양한 I/O 작업과 관련된 코드를 작성할때 도움이 될 것 같아 정리를 하게 되었다.2. 시스템 콜을 직접 사용할때 문제2.1 Alignment 문제Alignment 문제는 운영체제가 파일을 Block 단위로 I/O하기 때문에 발생하는 문제이다. 대부분의 파일 시스템과 디스크는 블록(Block) 단위로 데이터를 읽고 쓰며, 그 단위는4KB 또는 그 배수이다. 즉 프로그래머가 임의의 버퍼에 read 혹은 write 하라는 코드를 작성하면 이 버퍼의 시작 주소 및 크기가 Block의 시작..

CS 2024.12.08

OS의 I/O Device 추상화 & Block I/O & Non-Block I/O: Multiplexing

시스템 프로그래밍시간에 배운 개념중 개인적으로 중요하다고 생각한 개념을 정리해보았다.1. OS의 I/O Device 추상화1.1 OS는 I/O Device를 File 이라는 개념으로 추상화한다.운영 체제는 다양한 입출력 장치를 일관된 방식으로 다루기 위해 I/O Device를 파일이라는 개념으로 추상화한다. 이를 통해 운영 체제는 키보드, 파이프, 스토리지, 네트워크 소켓 등 모든 I/O 장치를 동일한 방식으로 다룬다. 예를 들어, 프로그램이 하드 디스크에서 데이터를 읽는 작업과 네트워크에서 데이터를 읽는 작업을 동일한 방식으로 처리할 수 있다. 이 덕분에, 응용 프로그램 개발자는 하드웨어 세부 사항을 신경 쓰지 않고도 입출력 작업을 처리할 수 있다. 운영체제는 “파일 디스크립터”라는 모든 I/O Dev..

CS 2024.12.01

Java 스트림 성능 최적화 전략: 지연연산과 루프퓨전, 쇼트서킷

1. 스트림을 사용하는 흐름스트림 생성 ex) stream()중간 연산 ex) filter(), map()종단 연산 ex) toList()Java 스트림은 스트림을 생성한 뒤 원하는 연산을 수행하고 결과를 컬렉션으로 반환하는 방식으로 사용된다.스트림을 한번이라도 사용해보았다면 익숙한 내용이다. 아래 예제를 살펴보자public List getMostPopularCategories(int n) { return countBooksByCategory().entrySet().stream() // 스트림 생성 .sorted(Comparator.comparingLong(Map.Entry::getValue).reversed()) .map(Map.Entr..

Backend/Java 2024.11.25

CPU & I/O Bound Job: 최적의 스레드 개수

서론시스템 프로그래밍 과제를 해결하며 CPU bound 와 I/O bound 작업에 대해 스레드의 개수를 변화시켜가며 총 소요시간을 관찰해보았다. CPU bound작업은 스레드의 개수가 하드웨어의 코어 개수와 비슷할때 성능이 가장 좋았고 스레드 개수가 늘어날수록 성능이 안좋아졌다. 한편, I/O 작업은 스레드가 너무 많지 않은 선에서 개수가 늘어날수록 성능이 개선되었다. 이러한 결과의 원인을 분석하고자 CPU&I/O Bound job의 특징을 정리하고 각 경우에 적정 쓰레드 개수를 어떻게 설정할지 조사해보았다.1. CPU Bound job1.1 CPU Bound 정의주로 CPU의 성능에 총 소요시간이 결정되는 작업즉, CPU의 코어 수나 클럭 속도 등이 소요 시간에 큰 영향을 미침ex) 대규모 수학 계산..

CS 2024.11.21