반응형

프로그래밍 42

스레드 관리의 핵심: pthread_join()과 pthread_detach()의 역할과 중요성

멀티스레드 프로그래밍을 하다 보면 스레드의 생명주기와 자원 관리가 중요한 주제로 떠오른다. 특히 POSIX 스레드(pthread)를 사용할 때, pthread_join()과 pthread_detach()는 스레드 관리에서 핵심적인 역할을 한다. 프로세스가 종료되면 운영체제가 모든 스레드와 관련 자원을 회수한다고 알려져 있지만, 그럼에도 불구하고 이 두 함수가 왜 필요한 걸까? pthread_join()과 pthread_detach()의 필요성, 사용 시기, 그리고 프로세스 실행 중 자원 관리와 동기화에 미치는 영향을 살펴본다.프로세스 종료와 자원 회수의 기본 원리먼저, 프로세스가 종료될 때 어떤 일이 일어나는지 알아보자. 프로세스가 정상적으로 종료되든(예: main 함수의 반환 또는 exit() 호출),..

도커(Docker) : 개념부터 장점, 쿠버네티스까지

도커(Docker)는 현대 소프트웨어 개발과 배포에서 빼놓을 수 없는 핵심 기술 중 하나입니다. 이 글에서는 도커의 탄생 배경, 작동 방식, 장점, 그리고 가상 머신(VM) 및 쿠버네티스(Kubernetes)와의 관계를 상세히 다룹니다. 도커를 처음 접하는 분들도 이해할 수 있도록 단계별로 설명하겠습니다.1. 가상화 기술과 그 한계도커를 이해하려면 먼저 기존의 컴퓨터 구조와 가상화 기술을 알아야 합니다.컴퓨터의 기본 구조컴퓨터는 하드웨어와 소프트웨어로 구성됩니다. 소프트웨어는 다시:시스템 소프트웨어: 운영체제(OS, Operating System)사용자 모드 애플리케이션: 우리가 사용하는 프로그램(예: 웹 브라우저, 워드 프로세서)운영체제는 각 프로그램(프로세스)에 독립적인 가상 메모리 공간을 제공하여,..

Windows 10 Microsoft Compatibility Telemetry 비활성화 가이드

Microsoft Compatibility Telemetry(호환성 원격 분석)는 Windows 10 시스템의 성능과 사용 데이터를 Microsoft로 전송하는 서비스입니다. 이 서비스는 때때로 시스템 리소스를 많이 사용할 수 있으며, 개인정보 보호 측면에서 비활성화하고자 하는 사용자가 많습니다. 방법 1: 작업 스케줄러를 통한 비활성화작업 스케줄러 열기Windows 키 + R을 눌러 실행 창을 엽니다taskschd.msc를 입력하고 Enter 키를 누릅니다원격 분석 작업 찾기왼쪽 패널에서 다음 경로로 이동합니다: 작업 스케줄러 라이브러리 > Microsoft > Windows > Application Experience오른쪽 패널에서 "Microsoft Compatibility Appraiser" 작업..

C# KD-tree 를 이용하여 벡터 데이터베이스를 구현하는 방법

C#으로 개발을 하다 보면 벡터 데이터를 효율적으로 다뤄야 할 때가 종종 있다. 특히 AI나 머신러닝 작업에서 벡터 데이터베이스는 빠른 검색과 유사도 계산의 핵심인데, 여기서 KD-tree가 빛을 발한다. KD-tree는 다차원 데이터를 구조화해서 빠르게 탐색할 수 있게 해주는 자료구조로, C#으로 구현하면 꽤 실용적인 결과물을 얻을 수 있다. 이번 글에서는 C#으로 KD-tree를 활용해 벡터 데이터베이스를 만드는 방법을 단계별로 풀어보려 한다. 코딩에 관심 있는 분들이라면 따라 하며 이해하기 좋을 테니, 한 번 읽어보자. KD-tree가 뭔데?KD-tree는 K차원 트리(K-Dimensional Tree)의 줄임말로, 다차원 공간에서 데이터를 계층적으로 분할해 저장하는 이진 트리다. 예를 들어 2D ..

프로그래밍 2025.03.14

[IA] Gitea service in Windows

윈도우에서 Gitea 서비스 설치 및 설정 가이드Gitea를 설치하기 전에 다음을 준비하세요:운영 체제: Windows 10, Windows Server 2012 이상 (64비트 권장).필수 소프트웨어:Git for Windows (최신 버전): https://git-scm.com/download/win텍스트 편집기 (예: Notepad++, VS Code 등).하드웨어 요구 사항: 최소 2 CPU 코어, 1GB RAM (소규모 팀 기준, 더 큰 규모라면 확장 필요).네트워크: 로컬 네트워크 또는 외부 액세스를 위한 포트 열기 준비 (기본 포트: 3000).관리자 권한: 명령 프롬프트 또는 PowerShell을 관리자 모드로 실행할 수 있어야 합니다.1. Gitea 다운로드 및 설치1.1 Gitea 실행..

[IA] inotify in HP UNIX

HP-UX에서 리눅스의 inotify와 유사한 기능을 제공하는 네이티브 C API는 존재하지 않습니다. HP-UX는 POSIX 표준을 따르는 유닉스 시스템이지만, inotify는 리눅스 커널에 특화된 기능으로, HP-UX에는 직접적인 대체재가 없습니다. 대신, HP-UX에서 파일 시스템 이벤트를 모니터링하려면 다음과 같은 대안을 사용할 수 있습니다:** polling 방식 (주기적 파일 확인)**: 파일의 수정 시간을 주기적으로 확인하는 방식입니다. HP-UX에서 stat() 함수를 사용하여 파일의 타임스탬프를 체크할 수 있습니다.HP-UX audit 시스템: HP-UX는 파일 시스템 이벤트를 추적하기 위한 auditing 기능을 제공합니다. 하지만 이는 시스템 수준 설정이 필요하며, inotify처럼 ..

[IA] C# Word automation 테이블 병합 셀의 개수 파악

개요Word 문서에서 테이블의 특정 셀이 병합되었는지 확인하고, 병합된 경우 병합된 행과 열의 수를 계산하려면 다음 단계를 따릅니다:Word 문서를 열고 특정 테이블을 선택합니다.확인하고자 하는 셀을 지정합니다.셀이 병합되었는지 확인합니다.병합된 경우, 병합 범위를 분석하여 행과 열의 수를 계산합니다.using System;using Word = Microsoft.Office.Interop.Word;public class WordAutomation{ public void GetMergedCellInfo(string filePath, int tableIndex, int rowIndex, int columnIndex) { // Word 애플리케이션 인스턴스 생성 Word...

[IA] Simple Interpreter in C99

구현 환경언어: C99라이브러리: cJSON (단일 헤더 파일 기반 경량 JSON 파서)의존성: libxml2 사용 불가, cJSON만 사용cJSON는 GitHub에서 다운로드 가능하며, 프로젝트에 cJSON.h와 cJSON.c를 포함해야 합니다.#include #include #include #include #include "cJSON.h"// 데이터 타입 정의typedef enum { TYPE_STRING, TYPE_NUMBER, TYPE_BOOL} DataType;// 값 구조체typedef struct { DataType type; union { char* string; double number; int boolean; } va..

IOCP를 이용한 OVERLAPPED 사용시 ErrorCode(6) 관련

IOCP OVERLAPPED사용할 경우 랜덤적으로 WSARecv 또는 WSASend 동작시 Error Code 6 일 발생하는 경우가 있다. 이것은 Overlapped 구조체의 hEvent 변수를 초기화하지 않고 사용해서 발생하는 것으로 해당 변수를 NULL 로 초기화해서 사용할 경우 발생하지 않는다. 아래의 경우에는 내가 사용했던 경우이다. 나중에 혹시 다시 발생하면 참고할 수 있도록 하자. class CROverlapped : public OVERLAPPED, public CRObject { public: E_TYPE_OVERLLAPED eType; std::shared_ptr m_ClntInfo; CROverlapped() { m_ClntInfo = nullptr; hEve..

MFC 에서 마우스 클릭을 비활성화 하는 방법

MFC에서 마우스 클릭 비활성화하는 방법 void CExmaplDlg::OnDisableMouseButton() { CRect rect; GetWindowRect(rect); ClipCursor(&rect); ShowCursor(FALSE); ::SetCapture(m_hWnd); } void CExampleDlg::OnEnableMouse() { ShowCursor(TRUE); ClipCursor(NULL); ::ReleaseCapture(); } 보통 마우스를 비활성화시켰을 경우 Ctrl + Alt + Del 키를 이용하여 다시 동작 가능하도록 한다. 특정 동작이나 수행하는 동안 마우스 입력을 제한해야 할 경우 사용하면 될 듯 싶다.

반응형