회사가 ㅈ같아요
이직하세요
얼마전에 두더지씨의 메세지가 모두에게 잘 못 간 적이 있어요 🥲 광역질문을 테스트하던 중 실수로 모두에게 이메일을 날리는 실수를 범했는데요. 더위를 먹었었나 봐요. 미안해요. 지금은 모든 문제가 수정 되어서 앞으로 이런 실수는 없을거에요. 🙃 제발.
정말 반가와요 여러분. 오랜만의 Mr.두더지 질문이에요. 기나긴 장마 끝에 곧 해가 찾아 올까요? 두더지는 땅속이 너무 습하게 젖어서 너무 힘든 나날을 보내고 있어요. 🥲 여러분은 여름휴가 계획 잡았나요? 더지팀은 아직 마땅한 여름 휴가지를 정하지 못했어요. 성수기 가격이 워낙 비싸서 엄두가 안 나기도 하고.. 익명의 두더지들은 어떤가요?
날씨가 많이 덥네요. 더위 조심하세요.
좋습니다 혁종님도 조심하십시오
GPT의 등장과 같은 AI기술이 점점 발전해가는데요. 프론트엔드 개발자의 끝은 언제쯤 될 것이라고 예상하시나요?
그것은…. 와규님이 은퇴하는 날
선생님 안녕하세요! 정말 요즘 너무 더운 날씨입니다..ㅠㅠ 더위 조심하시고용..! 다름이 아니라.. 선생님께서 추천해주셨던 뇌를 자극하는 알고리즘 / 프로그래머가 몰랐던 멀티코어 CPU 이야기 2010년대 나왔던 책들인데 좀 오래된 책이라 2023년에 들어와서도 읽어도 될지 궁금해서 여쭤봐요.. 두 책 다 절판된 책인데 운좋게 구해서요ㅎㅎ 그리고 따로 추천해주실 책도 있는지 궁금합니다.
상관 없습니다! 기초는 변하지 않으니까요. 알고리즘은 바뀌지 않는 기술입니다. 때문에 튼튼하게 이해하고 있어야 합니다. 두 책 모두 1990년의 알고리즘, CPU와 큰 차이가 없습니다. 알고리즘은 트렌드가 아니라 Fundamental 입니다.
안녕하세요 와롤러님. 어제 운영체제 강의에서 질문 못한게 있어서 더지에 남깁니다 (다음 시간에 다룰 내용이라고 하셔서 고민하다가 질문을 안했는데, 계속 궁금증이 남네요) - 프로세스 a, b, c 가 메모리에 올라가 있는 상황 - a의 작업이 오래걸려서 b로 갈아타고, b도 느려서 c로 갈아탄 상황 -> 위의 상황에서 a 프로세스의 컨텍스트 스택이 저장된 후 프로세스 b로 넘어가고, 프로세스 c로 넘어갈 때도 동일한 작업이 이루어지는 것으로 이해했습니다 -> 여기서 궁금한 점은 작업이 다시 전환되는 '순서'인데요 스택의 경우 후입선출의 작업 순서를 가지는 것으로 알고있습니다. 따라서 a -> b -> c 순서로 프로세스 실행이 전환된다면 프로세스 c의 작업을 마쳤을 경우 프로세스 b로 돌아갈 수 밖에 없는 건가요? 만약 a로 돌아간다면, 이전 a 작업데이터가 b 스택 이전에 존재하니까 이전에 저장했던 데이터를 사용할 수 없어서 처음부터 작업을 진행해야 하는건가요?
OS가 프로세스의 컨텍스트를 저장하는데 스택을 사용하고 있지는 않습니다. 대신에 테이블과 같은 다른 자료구조를 사용하고 있습니다. 잘 생각하셨습니다. 스택이라면 A 프로세스의 컨텍스트를 꺼내기 위해서 B까지 꺼내야 하는 상황이 벌어지겠죠. 작업이 전환되는 순서는 OS의 스케줄링 알고리즘에 의해 결정 됩니다. 따라서 A 프로세스로 갈지 B 프로세스로 갈지 예측하기는 어렵습니다. 그 때 그 때 메모리의 상황, CPU의 상태에 따라 달라집니다. 제가 강의에서 표현하기로는 '오래 걸리는 것 같으면' 컨텍스트 스위칭이 일어난다고 했는데 이처럼 너무 많은 시간을 혼자 점유하고 있으면 스위칭이 일어나기도 하고요. 좀 더 높은 우선순위의 작업이 생기면 '인터럽트'가 발생하면서 스위칭이 생길 수도 있습니다. 더 자세한 것을 공부하고 싶다면 운영체제의 '스케줄링 알고리즘'에 대해서 알아보시면 좋습니다.
4. 금일 다룬 promise, async/await은 비동기를 운영체제에게 전달하여 하드웨어에게 인식시킬 수 있는 문법으로, 운영체제/하드웨어의 비동기 처리방식을 활용해 웹 프로그램에서도 비동기를 구현할 수 있도록 한다. 5. 이로인해 서버 컴퓨터를 메모리를 감소시키는 등 자원 효율성을 증진시키는 효과를 가져온다. 이렇게 정리를 하였는데, 맞게 이해를 한걸까요?
아래 3번까지의 거의 잘 이해하신 것 같습니다. 네 맞습니다. 4는... 약간의 수정만 있으면 될 것 같습니다. async/await 키워드와 promise는 node의 인터프리터가 실행되면서 기계어로 바꿀 것이고 이를 최종적으로는 CPU가 실행하게 됩니다. 운영체제가 코드에 어떤 변형을 가하지는 않습니다. 다른 언어, C/C++ 같은 경우 이런 코드 변환 과정을 '컴파일'이라고 하고 '컴파일러'라는 프로그램이 따로 있습니다. node는 이와 비슷한 개념을 '인터프리터'라고 합니다. 5의 경우에도 맞는 말입니다. 비동기 처리를 지원하게 되면서 메모리 사용량도 줄어든 것이 사실이긴 합니다. 그러나 그 덕분에 CPU가 덜 바쁘게(?) 됐다는 사실도 있습니다.
다시 찾아보니 node를 엄밀하게 '인터프리터'라고 하지는 않는것 같습니다. 최근의 언어들은 컴파일과 인터프리터 개념의 경계가 점점 흐릿해 지고 있거든요. JIT라는 기법도 있고요... 아직 이 부분까지는 엄격 근엄 진지하게 따지지 않으셔도 될거 같습니다.
오늘 귀한시간 내주셔서 감사합니다. 배운 내용을 잘 이해한 건지 점검하고 싶은데 소통할 창구가 부족해서, 혹시 더지에 남기면 확인이 가능하실까 싶어서 글 남깁니다. 오늘 배운 내용을 아주 간단하게 정리하면 1. 하드웨어는 기본적으로 비동기 작업을 수행한다 (작업을 빠르게 번갈아가며 수행하여, 마치 동시에 실행되는 것처럼) 2. 이를 가능케 하는 것은 운영체제가 하드웨어를 효율적으로 제어하기 때문이다 3. 하지만 프로그래밍 언어 수준에서는 비동기 문법이 부재하였음 (하나의 웹에서 다수의 요청이 발생하면 블로킹이 발생하므로 이를 해결하기 위해 동일한 프로그램을 여러개 실행하는 방식으로 해결했고, 이 때문에 다수의 서버 컴퓨터가 필요했음) * 글자 수 제한이 넘어갈 것 같아서, 위에 추가로 작성하겠습니다..!
하드웨어가 비동기적으로 작업을 수행하는 것은 사실입니다. 그런데 작업을 빠르게 번갈아가며 수행하는것을 '비동기'라고 하지는 않고 정확히는 '시분할'이라고 합니다. 두 가지는 다른 개념이긴합니다. 비동기 덕분에 시분할이 좀 더 효율적이게 된 면이 있다고 봐야 합니다.
수강생 듣는 강의 들어보셨는지 모르겠지만 그거보다 백 배 천 배 너무 알찼습니다 비교도 안될 정도로..! 이게 1700이에요...
1700은 1700만원이라는 뜻이겠죠? 그렇다면 저는 적어도 17억~170억 정도인셈이군요 큭큭