게시글
질문&답변
abstract class와 sealed class는 어느경우에 나눠 사용하나요?
질문이 잘 전달되어서 다행이네요 ! 고민하고 있던 내용이었는데, 실무에서 코틀린이 어떻게 사용되고 있는지 잘 몰라 확신이 없었습니다 ㅎㅎㅎ... 명확한 답변 감사드립니다 !
- 4
- 2
- 1.8K
질문&답변
프로세스 스레드 질문있습니다
계속해서 하드웨어 스레드와 커널 스레드의 차이, 커널 스레드와 유저 스레드의 차이를 이해하지 못하고 있었습니다. 이제 약간 감을 잡은 것 같습니다. (제대로 이해했는지는 잘 모르겠습니다. 😅) 우선 운영체제와 커널의 정확한 차이에 대해 찾아보니, 컴퓨터에 전원이 공급되는 한 항상 메모리에 상주하는 운영체제의 가장 핵심적인 부분을 커널이라고 부르는것 같습니다. 그리고 운영체제도 결국 메모리에 탑재되어 동작하는 하나의 프로세스이기 때문에 내부적으로 여러개의 스레드를 가질 수 있으며, 이 스레드들이 대부분 운영체제 스케쥴러에 의해 직접적으로 스케쥴링되는 스레드로 이해됩니다. (즉, 커널 스레드 혹은 OS 스레드 혹은 네이티브 스레드) 본 강의에서는 하나의 프로세스 내에 여러개의 스레드가 존재할 수 있다하였습니다. 프로세스 속의 스레드들은 최소 1개 이상의 커널 스레드와 0개(사용자 입출력조차 없는 경우) 이상의 유저 스레드로 이루어진 것이구요. 그리고 이 유저 스레드들이 여러개 있다면, 한 개 이상의 커널 스레드에 할당되어 시분할처리를 통해 동시성 프로그래밍을 구현합니다. 그리고 결국엔 하드웨어 스레드가 이 커널 스레드들을 일대일로 붙잡고 실제 연산 등의 처리를 진행하는 것이기 때문에 하드웨어 스레드의 갯수가 바로 동시간대에 병렬처리할 수 있는 최대 갯수가 되는것이구요. 초기에는 여러 user-level-thread를 하나의 kernel-level-thread에 매핑했다고 합니다.하지만 이 방식은 동시성 모델이 제한적이고 멀티프로세서를 활요하지 못해 사용되지 않습니다. 제가 처음 자바를 공부할 때 보았던 대부분의 내용들이 이와 비슷했기 때문에, 결국 하나의 커널 스레드(최근까지는 이것을 CPU 혹은 프로세서라고 생각하고 있었습니다.)에 의해 여러개의 자바 스레드가 시분할처리가 되는것이면, 하나 이상의 자바 스레드가 blocking됐을 경우 다른 스레드들도 다 함께 blocking 될 것이라고 생각했습니다. 근데 최근에 동시성 프로그래밍을 공부하던 중 다음과 같이 동시간대에 여러개의 스레드가 처리되는것을 보고 제가 기존에 알고있던것이 잘못 알고있던 것이라는 의심이 생겼던 거구요. (사진) 인텔 8코어 8스레드 CPU (사진) M1 MAC ARM (8코어) 그런 와중에 자바 최적화라는 책을 읽던 중 다음과 같은 내용도 보았습니다. (사진) 그래서 운영체제에 대한 기본기가 너무 부족하다는 생각이 들어 자료를 찾다가 이 강의까지 오게 된 것입니다. 암튼 주저리주저리 잡담이 많았는데, 비전공자에게 최고로 좋은 강의와 친절한 답변에 정말 감사드립니다 🙇♂️🙇♂️ 큰 도움을 받았습니다. 새해 복 많이받으십셔!
- 4
- 3
- 1.2K
질문&답변
프로세스 스레드 질문있습니다
제가 지금 이해한게 맞는지 잘 모르겠네요. 설명을 해보자면, 1. CPU 스펙을 이야기할 때 8코어 16스레드라는 표현에서 8코어는 하드웨어 측면에서 말한것이구, 16스레드는 소프트웨어 측면에서 말한것이 맞을까요? 하드웨어가 너무 좋아져 코어하나에 1스레드로는 CPU 코어의 처리량을 따라가지 못하니 스레드를 두개두는것이구요. 비유를 하자면 컨베이어 벨트가 도는 속도가 너무 빨라 작업자 혼자서는 처리를 못하기 때문에 작업자를 두명두는것으로 이해가 되는 것 같아요. 2. 스레드는 커널에 접근할수 있는(시스템 콜 등을 할 수 있는) 커널 스레드와 그렇지 못한 유저 스레드로 나뉘며 커널 스레드는 CPU 스펙을 말할때 사용하는 8코어 16스레드( 그러니까 커널 스레드는 운영체제가 관리하고있는 CPU의 스레드와 같은 의미로 쓰이는 것 같구, JVM은 프로세스이며 JVM이 생성해낸 스레드(자바 스레드)가 유저 스레드인거같네요. 그리고 이 유저 스레드들이 실제로 어떤 작업을 처리하려면 결국 운영체제 스케쥴링에 의해 프로세서(CPU 스레드, 커널스레드)를 할당받아야 하는 것이구요. 그래서 어찌됐건 한순간에 동시에 돌 수 있는 CPU에 종속적이라 결국 16개가 한계인것이죠? 그림으로 표현하면 대략 아래와 같은..? (사진) 최근 자바최적화 라는 책을 보고있는데, 제가 비전공 신입이라 전공지식이 빈약해서 책을 보기가 참 힘들었는데, 정말 이해하기 쉬운 좋은 강의 만들어주셔서 큰 도움 받고 갑니다! 감사합니다. 🙇♂️
- 4
- 3
- 1.2K
고민있어요
콘솔 로그를 테스트하는 방법에 대해 알아봤습니다.
- 1
- 3
- 572
고민있어요
CountDownLatch가 뭔지 궁금해서 찾아봤습니다.
- 2
- 3
- 331
고민있어요
맥북이 바뀌셨나요?
- 0
- 1
- 184
고민있어요
진짜 대단하시네요
- 2
- 2
- 273
질문&답변
버그 문의드려봅니다.
Serializable관련 설명이 큰 도움이 됐습니다. 감사합니다 😁
- 6
- 6
- 5.3K
질문&답변
안녕하세요? 여쭤볼 곳이 없어 질문남깁니다
한참동안 테스트를 해봤습니다. with(nolock) 힌트를 줘서 더티리드를 해도 영속성 컨텍스트에는 똑같이 들어가고 해당 상태에서 변경감지를 통한 업데이트 쿼리가 나가네요 1. A 트랜잭션이 Member 테이블의 id 1번 row에 락을 걸어놓고 작업중 (이름 : 홍길동 -> 이순신 변경중) BEGIN TRAN UPDATE MEMBER SET NAME = '이순신' WHERE MEMBER_SEQ = 1; 2. B 트랜잭션이 with(nolock)힌트로 Member 테이블 1번 row를 읽어감 (가져온 이름 홍길동) 3. B 트랜잭션이 가져온 이름 '홍길동'을 '유관순'으로 변경 후 트랜잭션 커밋 (변경감지를 통한 업데이트 발생) 4. A트랜잭션이 Member 테이블 1번 row에 여전히 락을 걸어놓고 작업 중이므로 홍길동->유관순으로 변경된 업데이트 쿼리가 대기 5. A 트랜잭션이 홍길동->이순신으로 변경 후 커밋 6. B 트랜잭션이 이순신->유관순으로 변경 후 커밋 근데 여기서 5번째 순서에서 트랜잭션을 커밋하지 않고 기다리면 DB에 부하가 미친듯이 생깁니다. 일단 혼자 테스트해본건 여기까지네요 더티리드로 여기저기서 막 가져가서 변경감지를 통한 업데이트쿼리 발생으로 데이터 정합성이 깨질 여지가 있다는 부분까지는 확인했습니다 ㄷㄷ..
- 0
- 3
- 756
질문&답변
ORM 질문드립니다 !
늦은시간에 빠른답변 ㄷㄷ.. 정말 감사드립니다 !
- 0
- 2
- 207