{"componentChunkName":"component---src-templates-blog-post-js","path":"/CS/terms/","result":{"data":{"site":{"siteMetadata":{"title":"Progress Not Perfection","author":"Sunmin","siteUrl":"https://sunmin.netlify.com","comment":{"disqusShortName":"","utterances":"Sunmin0520/blog"}}},"markdownRemark":{"id":"29b7a293-5b24-50e3-a5eb-f3977998b78a","excerpt":"컴퓨터 내부의 언어 체계 ASCII: 키보드상의 기호에 7비트 부여 (decimal기준 0 ~ 127)  unicode: 기호에 16비트 부여하는 새로운 표준(현재는 21비트까지 확장) encoding: 유니코드는 문자코드마다 다른 인코딩 사용해서 변환 UTF-8: Unicode Transformation Format-8 bit: 모든 아스키 문자를 8비트로 표현해서 인코딩/ 하위호환성, 효율성 좋아서 널리 사용 색 인코딩: 웹페이지는 텍스트(주로 UTF-…","html":"<h3 id=\"컴퓨터-내부의-언어-체계\" style=\"position:relative;\"><a href=\"#%EC%BB%B4%ED%93%A8%ED%84%B0-%EB%82%B4%EB%B6%80%EC%9D%98-%EC%96%B8%EC%96%B4-%EC%B2%B4%EA%B3%84\" aria-label=\"컴퓨터 내부의 언어 체계 permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>컴퓨터 내부의 언어 체계</h3>\n<ul>\n<li>ASCII: 키보드상의 기호에 7비트 부여 (decimal기준 0 ~ 127) </li>\n<li>unicode: 기호에 16비트 부여하는 새로운 표준(현재는 21비트까지 확장)</li>\n<li>\n<p>encoding: 유니코드는 문자코드마다 다른 인코딩 사용해서 변환</p>\n<ul>\n<li>UTF-8: Unicode Transformation Format-8 bit: 모든 아스키 문자를 8비트로 표현해서 인코딩/ 하위호환성, 효율성 좋아서 널리 사용</li>\n</ul>\n</li>\n<li>색 인코딩: 웹페이지는 텍스트(주로 UTF-8 문자의 시퀀스로 이루어짐)를 표현 → hex triplet으로 텍스트 이용해서 색 표현 예:#ffff00 </li>\n</ul>\n<h3 id=\"메모리-디스크\" style=\"position:relative;\"><a href=\"#%EB%A9%94%EB%AA%A8%EB%A6%AC-%EB%94%94%EC%8A%A4%ED%81%AC\" aria-label=\"메모리 디스크 permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>메모리, 디스크</h3>\n<ul>\n<li>\n<p>레지스터: 클록을 공유하는 여러개의 D플립플롭을 한 패키지에 넣은 것</p>\n<ul>\n<li>D플립플롭: 에지에 의해 데이터가 바뀌는 래치</li>\n</ul>\n</li>\n<li>버스: 비트를 이동시키는 수단</li>\n<li>RAM: 메모리 위치 중 어디나 random access해서 read, write 가능한 메모리 #</li>\n<li>\n<p>ROM: 정확히는 write-once memory</p>\n<ul>\n<li>데이터 사용하려면 RAM으로 읽어들여야함</li>\n</ul>\n</li>\n<li>디스크 드라이브: 대량저장장치</li>\n<li>SSD: 디스크 드라이브 틀 안에 넣은 플래시 메모리</li>\n</ul>\n<h3 id=\"내부-구조\" style=\"position:relative;\"><a href=\"#%EB%82%B4%EB%B6%80-%EA%B5%AC%EC%A1%B0\" aria-label=\"내부 구조 permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>내부 구조</h3>\n<ul>\n<li>\n<p>CPU</p>\n<ul>\n<li>ALU: 산술논리장치 arithmetic login unit</li>\n<li>수를 표현하는 비트가 명령어에 대해 어떤 연산자 적용할지 ALU가 결정</li>\n<li>실행장치: execution unit, conrtrol unit</li>\n<li>메모리의 정해진 장소에서 명령코드, 비트 가져와서 ALU에게 할 것 알리고, 결과를 메모리에 돌려줌</li>\n<li>\n<p>명령어: 컴퓨터에게 어떤 것 할지 알려주는 비트패턴</p>\n<ul>\n<li>PC: program counter. 메모리 위치 참조. 필요한 명령어의 메모리 위치를 PC가 실행장치에게 알려줌</li>\n</ul>\n</li>\n</ul>\n</li>\n</ul>\n<h3 id=\"프로그램-메모리-관리\" style=\"position:relative;\"><a href=\"#%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%A8-%EB%A9%94%EB%AA%A8%EB%A6%AC-%EA%B4%80%EB%A6%AC\" aria-label=\"프로그램 메모리 관리 permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>프로그램, 메모리 관리</h3>\n<ul>\n<li>운영체제(운영체제커널): 여러 프로그램을 동시에 쓰기 위해 각 프로그램을 전환시켜주는 관리자 역할</li>\n<li>\n<p>프로세서는 보통 RAM으로 이루어진 메인메모리와 통신</p>\n<ul>\n<li>공간의 크기: 대용량 저장장치> 메인메모리> 레지스터</li>\n<li>속도는 반대</li>\n<li>캐시: 메인 메모리보다 크기는 훨씬 작지만 프로세서와 같은 속도로 작동</li>\n</ul>\n</li>\n</ul>\n<h3 id=\"외부와의-상호작용입출력-네트워킹\" style=\"position:relative;\"><a href=\"#%EC%99%B8%EB%B6%80%EC%99%80%EC%9D%98-%EC%83%81%ED%98%B8%EC%9E%91%EC%9A%A9%EC%9E%85%EC%B6%9C%EB%A0%A5-%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%82%B9\" aria-label=\"외부와의 상호작용입출력 네트워킹 permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>외부와의 상호작용(입출력, 네트워킹)</h3>\n<ul>\n<li>\n<p>네트워킹</p>\n<ul>\n<li>인터넷: 여러 계층의 프로토콜이 모인 집합</li>\n<li>\n<p>TCP/IP</p>\n<ul>\n<li>TCP: Transmission Control Protocol/ IP 위에서 패킷의 전송 조절</li>\n<li>IP: Internet Protocol/ 패킷을 옮겨주는 역할</li>\n</ul>\n</li>\n<li>IP 주소</li>\n<li>DNS </li>\n<li>\n<p>world wide web</p>\n<ul>\n<li>TCP/IP 위에 만들어진 여러 프로토콜이 있고, 그 중 가장 많이 사용되는 것은 HTTP(HyperText Transfer Protocol)</li>\n<li>HTTP 표준: 웹브라우저와 웹서버가 소통하는 방법 규정</li>\n</ul>\n</li>\n</ul>\n</li>\n</ul>\n<h3 id=\"데이터-구조와-처리\" style=\"position:relative;\"><a href=\"#%EB%8D%B0%EC%9D%B4%ED%84%B0-%EA%B5%AC%EC%A1%B0%EC%99%80-%EC%B2%98%EB%A6%AC\" aria-label=\"데이터 구조와 처리 permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>데이터 구조와 처리</h3>\n<ul>\n<li>\n<p>메모리 할당</p>\n<ul>\n<li>정적 static: 배열 같은 변수가 사용하는 메모리에 할당된 주소는 안 바뀜 &#x3C;-> 동적 dynamic: linked list처럼 새 노드가 추가될 경우 힙에서 새로운 메모리 얻음</li>\n<li>garbage collection: JS에서의 동적 메모리 할당 #</li>\n<li>C에서의 포인터 대신 참조 사용(메모리 주소 노출 안함) </li>\n</ul>\n</li>\n<li>\n<p>database: 정해놓은 방식대로 모아놓은 데이터 모음</p>\n<ul>\n<li>DBMS: 데이터베이스에 정보를 저장, 읽기하게 하는 프로그램</li>\n</ul>\n</li>\n<li>정렬: 정렬된 데이터의 검색 → 메모리 접근 횟수 줄여서 검색 빠름</li>\n<li>\n<p>샤딩 sharding(수평 파티셔닝 horizontal partitioning): 데이터베이스를 각각 다른 기계에서 실행되는 여러 개의 샤드로 나눠둠 → 요청 들어온 연산을 모든 샤드에 전달 → 컨트롤러가 결과 모음</p>\n<ul>\n<li>병렬적으로 수행 가능 → 성능 향상</li>\n</ul>\n</li>\n</ul>\n<h3 id=\"컴퓨터는-어떻게-프로그램을-해석-변환하는가\" style=\"position:relative;\"><a href=\"#%EC%BB%B4%ED%93%A8%ED%84%B0%EB%8A%94-%EC%96%B4%EB%96%BB%EA%B2%8C-%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%A8%EC%9D%84-%ED%95%B4%EC%84%9D-%EB%B3%80%ED%99%98%ED%95%98%EB%8A%94%EA%B0%80\" aria-label=\"컴퓨터는 어떻게 프로그램을 해석 변환하는가 permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>컴퓨터는 어떻게 프로그램을 해석, 변환하는가</h3>\n<ul>\n<li>\n<p>저수준 VS 고수준 언어</p>\n<ul>\n<li>저수준 low level: 컴퓨터가 이해하기 쉽게 작성된 프로그래밍 언어/현재는 특수한 경우 아니면 사용 안됨</li>\n<li>예: 기계어, 어셈블리어</li>\n<li>고수준 언어: 대부분의 프로그래밍 언어(추상화의 정도에 따라 결정)</li>\n<li>고수준 언어를 실행하는 방식: 인터프리트, 컴파일</li>\n<li>컴파일러: 소스코드 → 구체적인 기계에 맞는 기계어로 변환/번역처럼/컴파일언어의 예:C, C++</li>\n<li>\n<p>인터프리터: 인터프리터 언어로 작성된 코드는 가상머신virtual machine에서 실행됨 #</p>\n<ul>\n<li>즉 별도의 변환 없이 통역처럼.</li>\n<li>scripting language: 인터프리트되는 프로그래밍 언어/예: Python, Node.js, Java, HTML, CSS</li>\n<li>많은 언어들이 컴파일러, 인터프리터 모두 구현되어 있음</li>\n</ul>\n</li>\n</ul>\n</li>\n</ul>\n<h3 id=\"웹브라우저\" style=\"position:relative;\"><a href=\"#%EC%9B%B9%EB%B8%8C%EB%9D%BC%EC%9A%B0%EC%A0%80\" aria-label=\"웹브라우저 permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>웹브라우저</h3>\n<ul>\n<li>웹 브라우저는 소스코드를 인터프리트 &#x26; 실행하는 가상머신의 역할 둘다 수행</li>\n<li>\n<p>URL: 서버에게 HTTP프로토콜의 규정을 지켜서 URL(균일 자원 위치 지정자 Uniform Resource Locator) 통해 문서 요청</p>\n<ul>\n<li><a href=\"https://sunmin.netlify.app/?category=articles\">https://sunmin.netlify.app/?category=articles</a></li>\n<li>scheme(https) + host(sunmin.netlify.app) + path(?category=articles)</li>\n</ul>\n</li>\n<li>\n<p>HTML: HyperText Markup Language</p>\n<ul>\n<li>HyperText: 웹페이지 등 다른 대상에 대해 링크가 들어있는 텍스트</li>\n<li>Markup: 텍스트(본문) 과 구분 가능한 mark의 추가가 가능한 시스템</li>\n</ul>\n</li>\n<li>\n<p>DOM(Document Object Model): 웹페이지에 대한 인터페이스. 웹브라우저는 문서를 DOM에 따라 처리</p>\n<ul>\n<li>DFS로 해석</li>\n</ul>\n</li>\n<li>\n<p>Ajax (Asynchronous javascript and XML): 브라우저와 서버의 상호작용은 Ajax 통해 일어난다.</p>\n<ul>\n<li>서버는 Ajax엔진에 res를 주고, Ajax엔진은 사용자 인터페이스에 그 데이터를 줌. 즉 사용자 인터페이스와 서버가 분리되어 있기에 res받을 때마다 전체가 아닌 브라우저에서 바뀌는 부분에서만 빠르게 상호작용</li>\n<li>초기에는 소통하는 데이터 형식으로 XML 사용. 요즘은 JSON</li>\n</ul>\n</li>\n<li>JSON 자바스크립트 객체 표기법 Javascript Object Notation: JS객체를 사람이 읽기쉬운 형식으로 표현</li>\n</ul>\n<h3 id=\"고수준-언어와-저수준-언어의-프로그래밍-방식-비교\" style=\"position:relative;\"><a href=\"#%EA%B3%A0%EC%88%98%EC%A4%80-%EC%96%B8%EC%96%B4%EC%99%80-%EC%A0%80%EC%88%98%EC%A4%80-%EC%96%B8%EC%96%B4%EC%9D%98-%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D-%EB%B0%A9%EC%8B%9D-%EB%B9%84%EA%B5%90\" aria-label=\"고수준 언어와 저수준 언어의 프로그래밍 방식 비교 permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>고수준 언어와 저수준 언어의 프로그래밍 방식 비교</h3>\n<ul>\n<li>\n<p>터미널, 명령 프롬프트(command prompt), buffer, shell</p>\n<ul>\n<li>터미널을 열면 명령프롬프트가 보임 → 사용자가 input 입력 → 입력버퍼, 출력버퍼(buffer:FIFO데이터구조)사용 &#x26; echo(입력을 화면에 표시) </li>\n<li>shell은 명령 해석기</li>\n</ul>\n</li>\n</ul>\n<h3 id=\"병렬성-비동기성컴퓨터는-어떻게-한번에-많은-일을-할까\" style=\"position:relative;\"><a href=\"#%EB%B3%91%EB%A0%AC%EC%84%B1-%EB%B9%84%EB%8F%99%EA%B8%B0%EC%84%B1%EC%BB%B4%ED%93%A8%ED%84%B0%EB%8A%94-%EC%96%B4%EB%96%BB%EA%B2%8C-%ED%95%9C%EB%B2%88%EC%97%90-%EB%A7%8E%EC%9D%80-%EC%9D%BC%EC%9D%84-%ED%95%A0%EA%B9%8C\" aria-label=\"병렬성 비동기성컴퓨터는 어떻게 한번에 많은 일을 할까 permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>병렬성, 비동기성(컴퓨터는 어떻게 한번에 많은 일을 할까)</h3>\n<ul>\n<li>\n<p>운영체제, 프로세스, 스레드</p>\n<ul>\n<li>운영체제는 프로세스를 관리</li>\n<li>프로세스: 사용자공간 user space에서 실행되는 프로그램(운영체제에서 자원 할당받는 작업의 단위)</li>\n<li>서로 독자적인 메모리 가짐 → 다른 프로세스간의 공유 없음</li>\n<li>\n<p>멀티프로세스: 하나의 프로그램 &#x26; 여러 개의 프로세스 → 각 프로세스가 하나의 작업 처리</p>\n<ul>\n<li>하나의 프로세스가 block되도 다른 프로세스에는 영향 안 미침</li>\n</ul>\n</li>\n<li>스레드: static데이터와 힙을 공유하지만, 자체적으로 스택을 갖는 프로그램을 실행하는 단위</li>\n<li>프로세스의 자원 이용해서 작업 실행 (즉, 프로세스는 스레드의 컨테이너)</li>\n<li>\n<p>멀티스레드: 하나의 프로그램 &#x26; 여러 개의 스레드 → 각 스레드가 하나의 작업 처리</p>\n<ul>\n<li>빠르다(스레드는 일반적으로 프로그램보다 저장할 컨텍스트가 작다 → context switching 빠르다), 스레드 간 자원 공유/ 하나의 스레드에 문제 생기면 전체 프로세스가 영향 받는다</li>\n</ul>\n</li>\n</ul>\n</li>\n<li>\n<p>락 대기</p>\n<ul>\n<li>블로킹: 시스템 상에서 락 할당 가능할 때까지 해당 프로그램 suspend</li>\n<li>논블로킹: 프로그램 실행되고나서 락을 받았는지 나중에 notify</li>\n</ul>\n</li>\n<li>\n<p>JS</p>\n<ul>\n<li>JS는 싱글 스레드 → 특정 순서를 인터럽트(잠시 중단) 안됨</li>\n<li>JS 인터프리터는 프로그래머에게 싱글스레드 모델 제공, 내부적으로는 멀티스레드 활용 #</li>\n<li>동작의 순서 제어 위해 비동기 사용: Promise, async-await</li>\n</ul>\n</li>\n</ul>\n<h3 id=\"출처\" style=\"position:relative;\"><a href=\"#%EC%B6%9C%EC%B2%98\" aria-label=\"출처 permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>출처</h3>\n<ul>\n<li>한 권으로 읽는 컴퓨터 구조와 프로그래밍(2021, 조너선 스타인하트, 책만)</li>\n<li><a href=\"https://www.ibm.com/docs/ko/rational-soft-arch/9.6.1?topic=page-asynchronous-javascript-xml-ajax-overview\">https://www.ibm.com/docs/ko/rational-soft-arch/9.6.1?topic=page-asynchronous-javascript-xml-ajax-overview</a></li>\n<li><a href=\"https://www.geeksforgeeks.org/difference-between-process-and-thread/\">https://www.geeksforgeeks.org/difference-between-process-and-thread/</a></li>\n</ul>\n<h3 id=\"더-알아볼-것\" style=\"position:relative;\"><a href=\"#%EB%8D%94-%EC%95%8C%EC%95%84%EB%B3%BC-%EA%B2%83\" aria-label=\"더 알아볼 것 permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>더 알아볼 것</h3>\n<ul>\n<li class=\"task-list-item\"><input type=\"checkbox\" disabled> RAM, ROM, 메모리</li>\n<li class=\"task-list-item\"><input type=\"checkbox\" disabled> 메모리, 힙, 스택, 스레드</li>\n<li class=\"task-list-item\"><input type=\"checkbox\" disabled> JS 싱글스레드, 멀티스레드</li>\n<li class=\"task-list-item\"><input type=\"checkbox\" disabled> process, thread</li>\n<li class=\"task-list-item\"><input type=\"checkbox\" disabled> 가상머신</li>\n<li class=\"task-list-item\"><input type=\"checkbox\" disabled> garbage collection</li>\n</ul>","frontmatter":{"title":"[CS] 용어 정리","date":"February 01, 2022"}}},"pageContext":{"slug":"/CS/terms/","previous":{"fields":{"slug":"/Retrospective/2022/Jan/26th/"},"frontmatter":{"title":"[회고] 1월 넷째 주","category":"retrospective","draft":false}},"next":{"fields":{"slug":"/books/the_programmers_brain/"},"frontmatter":{"title":"[서적] 프로그래머의 뇌","category":"books","draft":false}}}},"staticQueryHashes":["3128451518","521680639"]}