주요 자료구조로 사용되는 List, Dictionary에 대해, 어느 상황에서 Collection was modified가 발생하는지 확인그리고 어떻게 해결할 수 있는지 확인Dictionary의 경우 Add, List의 경우 Add, Remove에서 발생Dictiona
버퍼 없는 채널 사용시 쓰기, 읽기가 동시에 일어나지 않으면 블락이 발생할 수 있음select를 통해 비동기로 구현아래 예시는 이번 주제를 설명하기에 적절하지 않을 수 있음 (채널과 고루틴 없이 충분히 구현 가능)하지만 핵심 부분만 간단하기 설명하기 위함실제 참고한 코
go 언어 프로그래밍 연습을 위해, 대기열 시스템을 구현수강신청이나 게임 로그인 대기열 등작업은 멀티쓰레드 환경에서 요청할 수 있다동일한 작업은 처리되기 전까지 다시 요청할 수 없다대신 앞에 남은 대기열을 알려준다 (ex. 수강신청 또는 게임 로그인 대기열)작업이 완료
개요 런타임중 panic이 발생했을 경우, stacktrace가 출력되고 프로그램이 종료됨 panic은 다른 언어의 Exception과 유사 recover 및 추가 작업을 통해 프로그램 종료 없이 stacktrace 출력 구현 recover는 다른 언어의 try
C- 자주 사용하는 string 값을 변수에 넣어두면 메모리 관리에 더 효율적일지 확인문자열 보간이 기존 string.Format보다 살짝 메모리, 성능이 좋음문자열 재사용은 효과 없음
기존 node.js의 javascript와 문법 및 사용법이 얼마나 다른지, 간단한 API 서버를 구현하면서 학습https://github.com/natae/TypeScript_APIServer 참고golang 웹서버와 유사한 느낌을 받음https:/
Linq 클래스의 Where, Find 등 함수에 람다식을 파라미터로 전달하여 특정 데이터를 탐색 할 수 있음Linq 없이 for, foreach로 탐색하는 경우와 성능 차이 확인Linq.csProgram.cs데이터 수 및 반복 횟수가 적을 경우 FindAll()이 성
도커로 php-fpm, nginx를 각각 다른 컨테이너에 세팅할 경우, 어떻게 요청을 전달하는지 확인docker-compose는 사용하지 않음php-fpm 세팅 1) php 소스 파일 2) 도커 파일nginx 세팅 1) nginx 설정 파일 2) php 소스 파
C - MSTestMS에서 기본으로 제공NUnitJava의 JUnit을 C - xUnitNUnit을 개선xUnit을 선택한 이유가장 유명한 것이 NUnit인데, 이를 개선했다는 점에서 기대종속성이 자유로움확장성이 좋음Visual Studio 2022에서 "보기>테스
C- StringBuilder는 내부적으로 어떻게 메모리를 관리하는지 확인코드 양이 많기 때문에 주석 제외하고, 필요한 부분만 분석String을 저장을 위해 기본적으로 char\[]를 사용하며 청크 기본 용량는 16, 최대 용량은 8000주석에 따르면, 청크 최대 용량
고루틴을 통해 동시성 처리시 항상 성능이 좋은지 확인작업이 간단한 경우, 고루틴으로 동시성 처리를 하면 성능이 오히려 떨어짐고루틴이 go 키워드에서 즉시 시작하는게 아닌, 스케줄링 되는 방식이 원인으로 추정작업이 비교적 복잡한 경우(=시간이 걸리는 경우), 성능 측면에
개요 예전에 for가 foreach 보다 성능이 좋다는 글을 종종 본 적 있음 .NET6에서 직접 확인 코드 Program.cs Loop.cs Recorder.cs 출력 결론 메모리 사용량 및 시간 성능은 차이가 없는 것으로 보임
golang에서 다양한 직렬화 벤치마크 테스트간단한 특징 (golang 기준)gob: 기본 패키지에 포함, 다른 언어에서 지원 안함bson: mongoDB 패키지의 일부protobuf: protoc, protoc-gen-go 등 준비할 게 많음messagepack: 무
개요 .NET에서 제공하는 MemberWiseClone()와 대입의 차이 확인 효율적인 깊은 복사를 위한 Serialization 활용 코드 출력 결론 대입의 경우 기존 객체를 동일하게 가르키는 포인터를 생성함 모든 수정사항이 동일하게 반영됨 MemberWise
개요 golang에서 얕은 복사, 깊은 복사 구현 실제 메모리 주소를 출력하여 차이 확인 코드 study/copy.go main.go 추가 설명 깊은 복사는 신규 변수에 기존 변수의 멤버를 일일히 복사하는 방식과 직렬화를 이용해 복사하는 방식이 있음 위 코드는 후자
개요 Go 1.18 버전부터 제네릭을 지원함 제네릭과 유사하게(?) 사용하기위해 빈 인터페이스를 사용했었는데, 제네릭과 직접 성능 비교 빈 인터페이스 방식은 실제 사용하려면 추가적인 타입 변환이 필요하기 때문에, 제네릭이 우세할 것 같음 코드 interface_qu
개요 함수의 일반 리시버와 포인터 리시버의 차이에 대해 여거에 인터페이스까지 사용한다면? 코드 결론 구조체 함수가 일반 리시버의 경우 call by value, 포인터 리시버의 경우 call by reference로 동작 구조체 선언을 일반이든, 포인터든 구조체 함
개요 golang은 가비지 콜렉션으로 인한 성능 저하를 최소화 하기 위해 압축과 세대별GC를 사용하지 않음 java, C# 등 가상머신 기반에서는 압축과 세대별GC를 사용함 압축: 가비지 콜렉션 이후 메모리 단편화를 막기 위해 메모리 빈공간 없이 당겨오는 작업
코드 출력 추론 전역 변수와 로컬 변수의 메모리 주소대가 완전히 다름 ex. 0x1023~, 0x140001~ 메모리 영역은 일반 변수, Slice 포인터 변수, 포인터 변수 세 영역으로 나뉨 ex. 0x10239~, 0x102364~, 0x102363~ map,
개요 golang에서 네이티브로 지원하지 않는 자료구조를 구현 다양한 타입 지원을 위해 빈 인터페이스 사용 이후 제네릭과 비교했을 때, 제네릭에 비해 성능이 떨어짐 https://velog.io/@natae/golang-generic-vs-empty-interf