관련 있는 이전 발행글 2021.03.23 - [언어와 프레임워크/javascript] - 반복문 비동기 처리 ( + Event Loop, Promise ) 2021.11.29 - [이론/동시성모델] - 서버는 여러개의 request를 어떻게 감당할까? 2022.02.02 - [이론/동시성모델] - [문서정리] I/O Bound 서버를 스케일링 하기 위한 리액터 패턴 참고자료 server architecture (thread-base, event-base, SEDA) Performance and scalability analysis of Java IO and NIO based server models, their implementation and comparison 1) thread-based serve..
=> 이거 완전 그냥 노드 얘기임 😎 👾 ⬇️ Reactor Pattern for Scaling I/O Bound Server 아이유가 당신의 플랫폼으로 팬들과 소통하겠다고 얘기해서 엄청나게 유명해진 채팅 서버를 운영해야 하는 상황이라고 가정해보자. 당신은 10K 정도의 동시 접속이 이루어지고 있다는 것을 깨달았다. 1개의 단순한 서버라면 이것을 어떻게 핸들링 할까? 두가지 측면에서 생각해 볼 수 있다. - 싱글 스레드를 써야 할까 멀티스레드로 해야 할까? 프로세스는 싱글? 멀티? - 어떤 reading 매커니즘을 서야 할까? Blocking IO? Non-Blocking IO? 아니면 Demultiplexer? (참고) * 아래의 5 IO model을 적용하며 읽어보세요~ 🌹🌻🌸 ⬇️ blocking ..
👾아래 문서 정리 ⬇️ https://engineering.universe.com/introduction-to-concurrency-models-with-ruby-part-ii-c39c7e612bed Introduction to Concurrency Models with Ruby. Part II In the second part of our series we will take a look at more advanced concurrency models such as Actors, CSP, STM and of course Guilds engineering.universe.com 파트2에서는 Actor, CSP, STM, Guild 같은 심화된 동시성 모델을 살펴볼 것이다. 야호 😎💃 🐶 Actor Acto..
👾 아래 문서 정리 ⬇️ https://engineering.universe.com/introduction-to-concurrency-models-with-ruby-part-i-550d0dbb970 Introduction to Concurrency Models with Ruby. Part I In this first post, I would like to describe the differences between Processes, Threads, what the GIL is, EventMachine and Fibers in Ruby. engineering.universe.com 🐶 프로세스 concurrency => 한사람이 한손으로만 여러개의 공을 저글링하고 있는 것. 어떻게 보이든지 간에 이 사람은..
먼저 시작하기 전에 다음의 글(Implementing threads)을 배경 지식으로 같이 깔고 가면 좋겠다. yield하면 생산이라는 뜻이 먼저 떠올라서 의미가 잘 안 와닿았는데, 멀티스레딩 관점에서는 양보라는 다른 뜻으로 해석하는게 더 잘 맞는 것 같다. running 스레드가 다른 스레드로 실행을 양보하는 것! In computer science, yield is an action that occurs during multithreading, of forcing a processor to relinquish control of the current running thread, and sending it to the end of the running queue, of the same schedulin..
block 객체가 아니다. 그냥 코드 블럭, 그런데 이제 argument를 넘겨 받고 결과를 리턴할 수 있는 익명 함수 역할 하는. def f result = yield 3 p result end f { |x| x * 7 } #=> 21 syntax do / end 혹은 { } curly bracket yield 메소드 안에서 block을 호출하는데 쓰인다. 한 메소드 안에서 yield를 여러번 호출 할 수도 있고, yield와 함께 block에 n개의 인자를 넘겨줄 수도 있다. 그리고 block의 리턴값이 yield 문 evaluated value가 된다. def one_two_three yield 1 yield 2 yield 3 end one_two_three { |number| puts number..
👾 아래 문서 정리 ⬇️ http://www.it.uu.se/education/course/homepage/os/vt18/module-4/implementing-threads/ 스레드 라이브러리는 개발자가 스레드를 생성하고 관리할 수 있도록 하는 API를 제공한다. 커널 레벨 스레드 os에서 직접 제공하고 관리하는 스레드. 1 PCB/ 1 process 그리고 1 TCB/ 1 thread. 유저 레벨에서 스레드를 생성하고 관리할 수 있도록 시스템 콜을 제공한다. 🧸 장점 => 커널이 모든 스레드에 대한 정보를 알고 있다. 따라서 스케줄러가 더 많은 수의 스레드를 가지고 있는 프로세스에게 더 많은 cpu 타임을 할당하도록 할 수 있다. 자주 block 되는 어플리케이션의 경우에는 이 방식이 더 좋다. ( ..
💜 process in memory ( 해당 메모리 address에 접근할 수 있는 핸들 같은 것을 포인터로 표현하자면 ) code에 대한 포인터 => PC (프로그램 카운터) stack에 대한 포인터 => SP (스택 포인터 = 현재 콜스택(실행 컨텍스트) 어디인지 가리킴) data에 대한 포인터 => 변수명 heap에 대한 포인터 => C의 '포인터' (malloc, linked list) , Java에서 인스턴스 이름 같은 것 (=> 이 heap에 대한 포인터는 stack 영역에 저장됨) *참고로 c의 static 키워드 붙은 것 => data 영역에 저장됨 (전역 변수 효과) java의 static 키워드 붙은 것 => heap 영역에 저장됨 (클래스 멤버 효과) From the memory pe..