묻고 답해요
129만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결1시간만에 끝내는 virtual thread in spring boot
스케쥴러 질문드립니다
위 그림처럼 동일한 스케쥴러 1개가콘솔 출력에서는 mySch-2, 3, 4 형태로 계속 숫자가 증가하는데, 이것은 동일한 스케쥴러가 예를들어 2번째 구동, 3번째 구동 한다는 의미일까요? 아니면 5초마다 스케쥴러가 구동되지만 각 구동은 개별적인 가상 스레드에 의해 구동되고 삭제되어 숫자가 증가하는 의미일까요?
-
미해결1시간만에 끝내는 virtual thread in spring boot
Performance 테스트에서 CPU 작업도 Virtual이 빠른것 같습니다
2000바퀴 돌릴때Platform은 279000ms가 나오는데Virtual은 97480ms가 나오네요
-
미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part9: MMO 컨텐츠 구현 (DB연동 + 대형 구조 + 라이브 준비)
Room마다 Thread를 만들기
안녕하세요 루키스님 덕분에 서버개발자로 취업하였습니다.루키스님의 강의를 체화하기 위해서 간간히 코드를 보면서 잊어먹을랑 말랑한 것들을 다시 강의로 듣곤 합니다그러다가 아래 코드를 보면서 문득 의문이 들었는데요.while(true) { GameLogicTask.Instance.Update() }게임 실행 시 위 로직을 타면서 메인쓰레드 하나서 모든 Room의 Update를 담당하고 있는데Room에 유저수가 많아지게 되면 메인 쓰레드에 점점 부하가 더 많아지는게 아닌가해서 질문을 드립니다.메인쓰레드 부하가 많아지면 컨텍스트 스위칭이 생겨도 Room마다 Thread를 생성하여남은 자원을 Update가 바쁘게 돌아가는 Room쪽에 쓰레드를 조금 더 할당해 주어도 될까요?(밑에 질문에 답변해 주셨네요 ^^; Room마다 쓰레드를 더 만들겠습니다.) 심리스 월드에서 Actor마다 JobSerializer를 할당하는 방법을 쓰면,쓰레드를 너무 많이 만들게 될것 같은데 컨텍스트 스위칭 외에 또 생기는 성능적인 사이드 이펙트를 뭘 또 고려하면 좋을까요?Actor마다 JobSerializer를 쓴다고 하면 Actor단일로서는 lock을 걸지 않아도 되지만서로 상호작용이 일어나는 상황에서는 어쩔수 없이 lock을 걸어줄수 밖에 없을 것 같은데, 그러면 결국은 JobSerializer를 쓰지 않아도 되지 않나 부족한 지식으로 어렴풋이 생각이 듭니다.또한 JobSerializer를 Flush 하기 위해선 Actor마다 while(true) 루프를 돌면서 계속해서 잤다가 깼다가 확인 하는 과정과 컨텍스트 스위칭비용이 점점 더 늘어날 것 같은데 이런 비용을 감안하면서 사용하는 것인지요. 아니면 딱히 신경쓰지 않아도 될만한 부하인지 궁금합니다.
-
해결됨나도코딩의 자바 기본편 - 풀코스 (20시간)
Thread가 동시에 실행이 안됩니다.
안녕하세요! 좋은 강의 감사합니다.다름이 아니라 Thread편과 Runnable편에서 나도코딩님이 쓰신 코드를 그대로 써서 실행을 했는데요.Thread가 동시에 실행되지 않고 사장 청소가 다 실행되고 나서 직원 청소가 진행이 됩니다.Thread가 동시에 실행되지 않는 이유를 스스로 찾지는 못했습니다.혹시 제가 쓰고 있는 컴퓨터가 성능이 안 좋은 것도 영향이 있나요? 실행을 누르면 7초에서 10초 뒤에 실행이 완료됩니다. 답변해주시면 감사하겠습니다. 좋은 하루 되세요!(밑에 실행 결과 첨부하겠습니다.)결과:-- 사장 청소 시작 --(사장) 1번방 청소 중(사장) 3번방 청소 중(사장) 5번방 청소 중(사장) 7번방 청소 중(사장) 9번방 청소 중--사장 청소 끝 ---- 직원 청소 시작 (Thread) --(직원) 2번방 청소 중 (Thread)(직원) 4번방 청소 중 (Thread)(직원) 6번방 청소 중 (Thread)(직원) 8번방 청소 중 (Thread)(직원) 10번방 청소 중 (Thread)--직원 청소 끝 -- (Thread)
-
미해결기출로 대비하는 개발자 전공면접 [CS 완전정복]
Context Switching은 언제 발생하나요?
강의 잘 듣고 있습니다!! 궁금한 점이 하나 생겨 여쭤봅니다! 프로세스 간 context switching과 스레드 간 context switching이 비용도 다르고 조금 다르게 동작하는 것 같은데요. 각각 어느 경우에 발생하는 건지가 궁금합니다! 프로세스 스레드 구분없이 CPU 배분 시간?이 끝나면 발생하게 되는건가요?
-
해결됨기출로 대비하는 개발자 전공면접 [CS 완전정복]
Thread의 프로세스 메모리 사용 부분 질문
안녕하세요. 이번 강의에서 multi thread 환경에서 thread가 사용하는 process 의 메모리 영역에 대한 그림에 질문드립니다. 저번강의에서 thread는 process의 stack 영역을 제외하고 heap, data, code 영역은 공유한다고 들었는데 이번 강의 그림에는 code1,code2,code3이 분리가 되어있습니다. 프로세스 단위로는 code1,2,3 구분이 무의미하고 multi thread 단위 입장에서는 각각 다른 code를 수행할 수도 있고 같은 code를 수행할 수도 있지만 독립적인 단위라는 개념상 code를 분리하신거라고 이해하면 될까요?
-
해결됨Java TPC 실전프로젝트 (Java API 활용)
쓰레드 관련해서 질문합니다.
Runnable r=new DownloadBroker(dPath, fileName); Thread dLoad=new Thread(r); dLoad.start(); for(int i=0;i<10;i++) { try { Thread.sleep(1000); } catch (Exception e) { e.printStackTrace(); } System.out.print(""+(i+1)); } 쓰레드 관련해서 이해가 부족해서 이 부분이 이해가 되지 않습니다. dLoad.start(); 하면 다운로드가 이루어지고 1. Thread.sleep(1000);은 메인 쓰레드를 10초 후에 종료한다는 뜻인거 같은데, 이렇게 하는 이유가 있나요? 2. Runnable 객체를 만들어 Thread 객체에 생성자로 담은 후 dLoad.start();하는 과정에서 Runnable객체는 어떤 의미이며, Thread 객체를 생성(이것도 궁금)해서 dLoad.start()하는 부분이 궁금합니다. + 자바 기본 강좌 Stream에 관련된 부분도 만드시면 바로 수강하겠습니다. InputStream, BufferedReader 등등 조금 어렵다고 생각이 드네요. 대충은 알겠는데 ㅠㅠ
-
미해결
C++ Thread 사용시 문법 관련 질문입니다.
안녕하세요 저가 서버쪽 공부하려고 책을 보는데 Thread사용시의 문법이 이해가 안되어 서요. C++ 문법중에 1번.thread t([&] { result = 1 + 2; });2번. shared_ptr<thread> thread(new thread([&]() { while (true) { int n; { lock_guard<recursive_mutex> num_lock(num_mutex); n = num; num++; } if (n >= MaxCount) break; if (IsPrimeNumber(n)) { lock_guard<recursive_mutex> primes_lock(primes_mutex); primes.push_back(n); } } })); 위처럼 ([]{}) 이런식으로 사용했는데... 이게 어디서 온 문법인지 아니면 F3을 눌러봐도 함수내에 이런 내용이 있는지 찾을수가 없어서요. 위처럼 사용하는것도 함수포인터의 일종인가요?? 저가 아는 함수 포인터는 void(*bp2)() 이런 형태인데... ([]{}) 형태가 되니까 어떤 문법인지 궁금합니다..
-
미해결고수가 되는 파이썬 : 동시성과 병렬성 문법 배우기 Feat. 멀티스레딩 vs 멀티프로세싱 (Inflearn Original)
DaemonThread 생성시
강의중 설명하신 예제에서 y쓰레드만 데몬쓰레드로 지정할 경우 올바로 동작을 안하네요. 데몬쓰레드로 할 경우 서브쓰레드 모두를 데몬으로 지정해야 하나요? y쓰레드만 데몬으로 지정하고 실행하면 메인쓰레드가 종료된 후 x, y쓰레드 모두 종료가 된 듯 한데 프로세스는 계속 남아 있습니다. 강제 종료 해야 되네요...
-
해결됨[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
GameRoom class에서는 lock을 사용하지 않아도 멀티스레드 환경에서 안전할까요?
안녕하세요 Rookiss님! 양질의 강의를 제공해주셔서 정말 감사드립니다! 질문) GameRoom class에서는 lock을 사용하지 않아도 멀티스레드 환경에서 안전할까요? public void Flush() { foreach (ClientSession s in _sessions) s.Send(_pendingList); //Console.WriteLine($"Flushed {_pendingList.Count} items"); _pendingList.Clear(); } public void Broadcast(ArraySegment<byte> segment) { _pendingList.Add(segment); } 제 생각에 lock을 사용하지 않으면 _pendingList가 Clear되기 직전에 추가된 segment는 Send되지 못하고 삭제당하는 등 올바르지 못하게 동작하는 상황이 발생할 수 있을것 같았습니다. (Flush method는 main Thread, BroadCast method는 background Thread. 서로 다른 Thread에서 동작한다고 생각했습니다.) public void Flush() { lock(_lock) { foreach (ClientSession s in _sessions) s.Send(_pendingList); //Console.WriteLine($"Flushed {_pendingList.Count} items"); _pendingList.Clear(); } } public void Broadcast(ArraySegment<byte> segment) { lock(_lock) { _pendingList.Add(segment); } } 그래서 위처럼 lock을 걸어주는게 좋을것 같다고 생각했는데 걸지 않아도 괜찮은건가요? 걸어주는게 맞는건가요? 혹시 제가 놓쳤거나 틀린 부분있으면 알려주시면 감사하겠습니다!! 감사합니다!!
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
안녕하세요! 강의 초반 WAS의 멀티쓰레드 보고 질문 남깁니다!
저는 Springboot를 사용하고 있습니다. 강의에서 WAS가 자동으로 멀티쓰레드 처리를 기본설정으로 제공해준다고 하셨는데요 제가 따로 Service에서 클라이언트에게 바로 결과를 보여주지 않아도 되는 로직을 처리하기 위해 ThreadPool을 이용해서 쓰레드를 만들고 Response는 바로 주는 작업을 더 하고 있습니다. SpringAsyncConfig를 통해서요. 그렇다면 원래 WAS에서 사용되는 Request,Response를 위한 Thread와 제가 생성하는 Thread들이 섞이게 되는데 이 경우에 쓰레드 관리는 어떤식으로 되나요? WAS의 기본 설정(톰캣의 경우 200개) + 제가 따로 설정한 ThreadPool MAX SIZE까지 생성이 되는건가요?
-
미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
Session #2 강의 _pending 변수 질문입니다.
안녕하세요! 정말 이만한 게임서버에 관한 강의가 없는데 감사히 수강하고있습니다! Session #2 강의 보다가 질문을 올립니다. 아직 Session #2까지밖에 안봐서 인지는 모르지만 _pending으로 분기처리를 하는 부분이 왜 필요한지 모르겠습니다. 이미 _lock으로 들어왔으면 다른스레드는 못들어올 텐데 _pending으로 한번 더 분기해서 큐에만 넣고 빠져나올지 아니면 `RegisterSend`까지 해줄지를 결정하는 부분입니다. _lock에 들어오고 다른 쓰레드가 _pending으로 분기할 경우가 있을지 제 눈에는 도저히 판별하기가 힘드네요 ㅠㅠ 그런 경우가 생기나요?? 우선 _pending의 추가적인 분기없이 실행해도 정상작동합니다! 감사합니다!