맞춤법 검사를 원하는 단어나 문장을 입력해 주세요. 비동기(async) 프로그래밍 공부를 하다가
경쟁 상태 Race Condition, 혹은 Thread Safe 하지 않다는 개념을 배웠다.
(feat. 교착상태 DeadLock - 2개 이상의 스레드가 서로 배타적인 메모리의 사용(서로 락을 걸고 점유)으로 인해 메서드의 작업이 종료되지 못해 멈춰버리는 상황)
이는 간단하게 데이터나 히프 영역에 저장되어 있는 변수 등에
여러 스레드에서 동시에(같은 시점에) 접근하는 경우 문제가 생길 수 있음을 지칭하는 용어이다.
한 스레드에서는 get(읽기)로 접근하고, 다른 스레드에서는 set(쓰기)로 접근한다면..
꼬여서 문제가 생길 수도 있다는 것이다.
그럼 그냥 get 방식으로 여러 스레드에서 접근하면, 데이터 변형의 가능성이 없으니
Thread Safe 한 거 아닌가? 하는 의문이 생겨 gpt 선생님께 여쭤봤다.
오 예상과 같이 여러 스레드에서 읽기로만 접근하면 thread safe 하다고 한다.
다만 100% 보장하지는 않기 때문에 안전을 위해서는 스레드끼리 synchronized 되어야 한다고 한다.
데이터가 바뀌면 동시에 전부 바뀐 데이터에 접근하는 것처럼 말이다.
이를 위해서 Swift의 DispatchQueue에는 다양한 기법들이 존재한다고 한다.
( locks, semaphores, atomic operations 등)
싱글스레드의 개념에서 벗어나 멀티 스레드로 지식의 영역이 확장되니,
빠르고, 효율적이고, 메모리 누수 없이 스레드 세이프 한 코드를 작성할 수 있는
개발자가 되어야겠다는 다짐을 하게 된다. (리팩토링 마스터..!)
에러 없이 뚱땅뚱땅 구현하는 능력도 물론 중요하지만,
나중에 나아가서 정말 "좋은 개발자"가 되는 것은 다른 문제라 생각하기에..
컴퓨터 과학 공부도 꾸준히 해야 하는 이유, 알고리즘도 공부해야 하는 이유...
공부의 목적성과 이유, 그리고 필요성에 대해 알아가다 보니 스스로 동기 부여가 되는 것 같다 ㅎㅎ
지금은 ChatGPT가 구글링을 대신해주고, 스택의 여러 정보들을 취합해 정리해 주는 멋진 조력자 느낌이지만,
훗날 알고리즘이 크게 발전한다면 어떤 부작용이 있을지, 또 어떤 변화들이 있을지 궁금하면서 두렵기도 하다.
내가 개발 공부, 코딩을 시작하게 된 이유에는 시대의 흐름을 타기 위해서도 있지만,
인공지능 등 기술에 무력하게 지배당하지 않고 최소한 맞서거나 명령할 수 있는
지식, 지혜를 가진 존재로 살아가고 싶어서도 큰 부분을 차지한다.