디시인사이드 갤러리

갤러리 이슈박스, 최근방문 갤러리

갤러리 본문 영역

에이도비야. 경력 15년 인정이야한다만 개념적으로 틀렸다. 설명해줌

ㅆㅇㅆ(124.216) 2025.10.29 01:28:46
조회 345 추천 0 댓글 0
														

1. 니가 작성한 테스트의 문제


lru_cache는 메모이제션 캐싱이고


lambada_:store_instance 는 'DI 컨테이너를 통한 애플리 케이션 스코프 싱글톤 인스턴스임'


이 캐싱차이는 너도 알거라 생각한다. 인스턴스 캐싱을 말하는데 왜 자꾸 메모이제션 캐싱을 이야기하냐 FAST API가 원하는 양식을 구현하는거임


2.asyncio.gather는 단일스레드내 비동기 동시성임


내가 테스트하려는건 parallelism임


이 상황에서 변경가능한(mutable)상태를 공유하는 싱글톤은 데이터 레이스가 발생함


3. 실행모델에 대한 오해


unvicorn -- worker2 같이 별개 os 프로세스 2개 띄우는건데 이게 뭐가 문제임? 당연히 메모리간 이고


4. Depends 방식은 리퀘스트 스코프(웹) 방식이고, 이건 VectorStore는 애플리케이션 스코프다.


FastAPI에서도 lifeSpan 쓰라고 한다.


import concurrent.futures
import threading
import time

# --- 1. '에이도비'가 주의해서 쓰면 된다는 '가변 싱글톤' ---
# (예시로 든 'dict'처럼 '가변 상태(counter)'를 가짐)

class NaiveMutableSingleton:
    _instance = None
   
    def __new__(cls):
        # 고전적인 싱글톤 구현
        if cls._instance is None:
            time.sleep(0.0001) # 스레드 충돌을 유도하기 위한 약간의 딜레이
            cls._instance = super().__new__(cls)
            cls._instance.counter = 0 # <-- 이것이 '공유된 가변 상태'
        return cls._instance

    def increment(self):
        """
        이 함수는 '스레드 안전(Thread-Safe)'하지 않는다
        """
        current_val = self.counter  # 1. 값 읽기 (Read)
       
        # --- 위험 구간 (Critical Section) ---
        # 이 시점에 다른 스레드가 끼어들어 'current_val'을 동시에 읽을 수 있음!
        time.sleep(0.0001) # 다른 스레드가 끼어들 시간을 강제로 만듦
        # --- 위험 구간 끝 ---
       
        self.counter = current_val + 1 # 2. 값 쓰기 (Write)

# --- 2. '에이도비'의 테스트(asyncio)가 아닌, '진짜 병렬' 테스트 ---
# 멀티 스레드 (ThreadPoolExecutor)를 사용

NUM_THREADS = 10     # 10개의 스레드 (병렬 에이전트)
NUM_TASKS_PER_THREAD = 100 # 각 스레드가 100번씩 작업
TOTAL_TASKS = NUM_THREADS * NUM_TASKS_PER_THREAD # 총 예상 값 = 10 * 100 = 1000

print(f"--- '가변 싱글톤' 병렬 안정성 테스트 ---")
print(f"{NUM_THREADS}개의 병렬 스레드(에이전트)가 싱글톤의 counter를 {NUM_TASKS_PER_THREAD}번씩 총 {TOTAL_TASKS}번 증가시킵니다.")
print("('에이도비' 주장: '주의해서 쓰면' 문제없다)")
print("('내' 주장: '가변 싱글톤'은 병렬 환경에서 데이터 경쟁을 일으킨다)\n")

def run_task(task_id):
    s = NaiveMutableSingleton()
    for _ in range(NUM_TASKS_PER_THREAD):
        s.increment()
    # print(f"스레드 {task_id} 완료...") # 주석 해제 시 더 복잡하게 얽힘

# 진짜 병렬 실행
with concurrent.futures.ThreadPoolExecutor(max_workers=NUM_THREADS) as executor:
    futures = [executor.submit(run_task, i) for i in range(NUM_THREADS)]
    concurrent.futures.wait(futures)

# --- 3. 결과 ---
final_counter = NaiveMutableSingleton().counter

print("\n--- 테스트 결과 ---")
print(f"예상 최종 값 (기대 값): {TOTAL_TASKS}")
print(f"실제 최종 값 (측정 값): {final_counter}")

if final_counter == TOTAL_TASKS:
    print("\n결과: ✅ 성공 (이론상 거의 불가능한 확률)")
else:
    print(f"\n결과: ❌ 대실패! (값이 깨짐)")
    print(f"이유: {TOTAL_TASKS - final_counter}번의 쓰기(write) 작업이 '데이터 경쟁'으로 인해 유실됨.")
    print("이것이 '공유된 가변 상태'를 병렬로 접근할 때의 위.")

print("\n--- 결론 ---")
print("1. '에이도비'의 `asyncio.gather` 테스트는 '단일 스레드' 비동기라 이 문제를 발견조차 못함")
print("2. '주의해서 쓴다'는 말은, 모든 'increment' 함수에 'Lock'을 걸어야 한다는 뜻이며, 이는 코드를 복잡하게 하고 성능을 저하시킴.")
print("3. 내 방식(DI + Lifespan)은 애초에 이런 '가변 상태'를 공유하지 않고,")
print("   '스레드 세이프'하거나 '불변'한 객체의 '참조'를 주입하므로, 아키텍처 수준에서 이 위험이 없음.")



24b0d121e09c28a8699fe8b115ef0469933efebd


다시한번 말하지만 리소스 정리 빼먹은거 지적해준거 고맙게 생각함


그냥 어차피 꺼지면 리소스 정리되니까 빼먹었는데 명시적으로 넣는게 맞지.


근데 그건 그거고 


이건 이거임.


너는 자꾸 '다중 이용자가 쓴다' 이걸로 착각하는데


그게 아님.


추천 비추천

0

고정닉 0

0

원본 첨부파일 1

댓글 영역

전체 댓글 0
본문 보기

하단 갤러리 리스트 영역

왼쪽 컨텐츠 영역

갤러리 리스트 영역

갤러리 리스트
번호 제목 글쓴이 작성일 조회 추천
설문 뛰어난 운동 신경으로 남자와 싸워도 이길 것 같은 여자 스타는? 운영자 25/11/24 - -
이슈 [디시人터뷰] 충무로가 주목하는 신예, '세계의 주인' 서수빈 운영자 25/11/24 - -
AD 대학생 필수템! What's in my Bag 운영자 25/11/21 - -
2901948 존나 추하긴 하다 211.234 << ㅋㅋㅋㅋ [20] 루도그담당(58.239) 11.10 236 4
2901947 이제 고소드립칠 타이밍인데 [5] ㅇㅇ(211.234) 11.10 107 2
2901946 부산 서면 길거리 영상 [5] 배구공(119.202) 11.10 105 0
2901945 ㅆㅇㅆ 강박장애까지 있나보네 [2] ㅇㅇ(118.235) 11.10 130 6
2901943 따당이가 자꾸 원종이 그리워 하는 이유가 혹시.. [4] ♥KiTTY냥덩♥갤로그로 이동합니다. 11.10 93 0
2901940 저 새끼 또 신고삭 때렸네 ㅋㅋㅋㅋㅋㅋ [1] ㅇㅇ(211.234) 11.10 93 6
2901937 구직급여 수급 도전 프갤러(42.18) 11.10 61 0
2901936 ㅆㅇㅆ가 계속 쳐맞아도 탈갤안하는 이유 분석 [1] ㅇㅇ(211.234) 11.10 106 7
2901935 추하다 동우야 [1] ㅇㅇ(106.101) 11.10 83 7
2901934 뭔 미련이 남아서 또 쳐기어오는거지 ㅋㅋ ㅇㅇ(118.235) 11.10 77 2
2901933 후우.. 논현으로 가야대는데 학동으로옴 ㅜ.ㅜ [7] 따당갤로그로 이동합니다. 11.10 138 0
2901931 ❤✨☀⭐⚡☘⛩나님 시작합니당⛩☘⚡⭐☀✨❤ [2] ♥KiTTY냥덩♥갤로그로 이동합니다. 11.10 77 0
2901929 저 이사갑니다. 일단 목금 만안구 집 보러 가요. 부모님이랑 [2] 넥도리아's(220.74) 11.10 91 0
2901926 충격적임.. [1] ♥KiTTY냥덩♥갤로그로 이동합니다. 11.10 60 0
2901925 에이도비 저새끼도 ㅆㅇㅆ임 [2] ㅇㅇ(117.111) 11.10 144 5
2901924 쌩 신입년 미쳤나 [2] 프갤러(125.143) 11.10 134 0
2901923 가장 싼 리눅스 보드는 안드로이드 TV 박스 [1] 발명도둑잡기(118.216) 11.10 92 0
2901922 석사 졸업도 아니고 수료는 뭐야 ㅋㅋ ㅇㅇ(121.140) 11.10 101 1
2901920 리눅스보드 개발해본사람 있냐? 깃깃갤로그로 이동합니다. 11.10 52 0
2901918 SSS급 devops랑 국평오 데브옵스 차이가 머임 프갤러(220.124) 11.10 78 0
2901915 ㅆㅇㅆ야 탈갤 좀 제발 해라 여기 너 원하는 사람 없어 [3] ㅇㅇ(106.101) 11.10 174 10
2901914 이시국에 퇴사하고 이직하는거 미친짓임?? [3] 프갤러(220.123) 11.10 146 0
2901912 나르시 [5] 배구공(119.202) 11.10 100 0
2901910 러스트 좋은데 왜 c cpp java c샵 node python 하냐고 [10] 프갤러(218.154) 11.10 134 0
2901909 이거 설계한 새끼 ㅁㅊ놈인가 ㄷㄷ [2] 에이도비갤로그로 이동합니다. 11.10 131 0
2901908 끄응.. ♥KiTTY냥덩♥갤로그로 이동합니다. 11.10 63 0
2901904 그레셤의 법칙은 더닝 크루거에 선행한다 [5] chironpractor갤로그로 이동합니다. 11.10 123 0
2901903 다들 광군제 때 뭐살 예정? [4] 에이도비갤로그로 이동합니다. 11.10 124 0
2901902 푸념. C++ 좋은데 왜 Java 하냐고. [4] 프갤러(59.16) 11.10 111 0
2901900 ❤✨☀⭐⚡☘⛩나님 시작합니당⛩☘⚡⭐☀✨❤ ♥KiTTY냥덩♥갤로그로 이동합니다. 11.10 51 0
2901898 ㅆㅇㅆ 뒤지니까 클린해졌네 [1] ㅇㅇ(125.141) 11.10 161 8
2901897 니네 개발용 컴 데탑씀 맥북씀? [4] 프갤러(220.86) 11.10 131 0
2901895 근데 러스트 안빨면 저능아 정신병자 맞음 [1] 프갤러(218.154) 11.10 84 0
2901894 nvidia 젠슨황은 여름에도 가죽 자켓로 나타나나? 나르시갤로그로 이동합니다. 11.10 71 0
2901893 이새끼들 지들이 공무원인줄아나 [4] 개멍청한유라갤로그로 이동합니다. 11.10 114 0
2901892 '우연'을 과학으로 풀 수 있을까? 양자역학 가장 쉽게 설명해 드립니다 발명도둑잡기(118.216) 11.10 79 0
2901891 지의견하고 다르면 무조건 정병.스토커,차단 하는게 어이가 없음 [2] ㅇㅇ(121.140) 11.10 95 5
2901888 씨발힘들다 [7] 개멍청한유라갤로그로 이동합니다. 11.10 135 0
2901887 애플 제품은 아이팟터치랑 에어팟밖에 안사용해봄 타이밍뒷.통수한방(1.213) 11.10 53 0
2901886 맥북 클램쉘하면 ㄹㅇ로 디스플레이 씹창남 ? [2] 프갤러(180.66) 11.10 88 0
2901885 자바 공부해야지 타이밍뒷.통수한방(1.213) 11.10 54 0
2901883 메이플 ㅋㅋ(122.36) 11.10 70 0
2901881 나도 사실 루팡임 [5] 루도그담당(118.235) 11.10 151 0
2901880 개발자새끼들은 대체 무슨일 하는거임? [12] ㅇㅇ(211.234) 11.10 220 0
2901879 러스트는 잘못 없어 틀린건 너희들이고 세상이 저능한거야 프갤러(218.154) 11.10 86 0
2901878 메이플도 하더라 [2] ㅋㅋ(122.36) 11.10 120 0
2901877 프갤 백가쟁명 [2] chironpractor갤로그로 이동합니다. 11.10 111 0
2901876 오전 하느라 시간 다 썻넹 [2] ♥KiTTY냥덩♥갤로그로 이동합니다. 11.10 138 0
2901874 원종하니까 생각나는건데 [2] 루도그담당(118.235) 11.10 136 0
2901873 점심 배부르다 [2] 루도그담당(118.235) 11.10 141 0
갤러리 내부 검색
제목+내용게시물 정렬 옵션

오른쪽 컨텐츠 영역

실시간 베스트

1/8

디시미디어

디시이슈

1/2