그때 내가 많은 책과 개념들이 '동기'와 '비동기'의 의미를 착각하고 있다고 했었지.
'동기'는 '비동시',
'비동기'는 '동시'의 개념에 가깝다고 말야.
결국
'동시' 라는건, 순서에 상관없는 일을 병렬화 하기 위해 존재하는 것이다.
'비동시' 라는건, 순서에 종속적인 일을 절차에 맞게 수행하는 것이다.
여기서, '시간', '순서', '문맥( context )' 이라는 세가지 고려 요소가 등장한다.
또한,
0. 동시성의 매체들 ( 결합을 느슨하게 한다 )
signal, interrupt, event, message
1. 동시의 생성자들
create_thread, create_process( fork ), setup_interrupt
2. 동시의 처리자들
ISR ( interrupt service routine ), event_handler, call_back_handler, thread_handler
3. 비동시적 흐름제어 요소들
jmp( goto ), int, iret, call / return
4. context 의 저장과 관련된 요소들
co-routine, setjmp( ~longjmp )
5. 두 동시 코드를 하나의 흐름으로 동기화 하기 위한 구현들
spin_lock, blocking, join, wait_for
등이 존재한다.
blocking 과 non-blocking 은 구현의 한 갈래라고 보는게 맞고,
동기 비동기와 조합해 개념적 패턴만 늘일 필요는 없다고 본다.
어차피 두 개 조합만으로 구현되는 경우도 일부고 말이지.
머라하지 여기서 말하는 동시에 해당하는걸 가능한 크게 묶어서 하나의 실행기로 보고
문맥에 의존이 생기니까 이 실행기를 실행하는 순서는 굳이 프로그래머가 명시하지 않아도 추상화를 통해 할 수 있다는말이었음
응 물론, 내가 이야기하는바와 비슷한것 같음.
동시성을 지원하느냐 아니냐에 따라 다양한 구현이 올 수 있다는 것.
사실 이 글에는 '시간' 요소에 대해서 자세히 언급하지 않는데, 성능을 위해선 시간요소를 적극적으로 산출해서, 불필요한 가정을 걸러내는게 가장 성능 좋고 확장성은 없는 구현이 되는셈.
코드가 어떻게 굴러갈지만 생각하면 크게 어려운건 없는데 실제로 짜려고하면 저 시간이란 놈때문에 구현이 너무 어려움 저수준이 어려운것도 그것때문이고
다양한 구현이 존재하는 이유가 저 시간에 적응하기 위한건데... 구현에 집중하면 개념과는 멀어져서 혼자 느린성능을 끌어안고 징징거리게 되지.
시작은 비동기( 동시 ) 뒤는 동기 ( 비동시 ) 즉, 동기화 전까지의 자유텀이 중요한거지 개념적으론 그냥 혼합입니다.
말 그대로, 모든 프로그램은 온전히 큰 그림으로 비동기 일 수는 없습니다. 국소 비동기가 존재할 뿐이죠.
아무 상관없는 코드들을 뭐하러 하나의 프로그램에 담아서 작성하겠어요? 그쵸? 각각 필요에 의해서 돌리면 되는데.
두어달전쯤 노드장인이 깽판친 장면을 보셨어야 했는데..
ㅋㅋ 노드장인이 많이 낚았나?
개추드립니당
이런 개념들을 직접 깨닫지 않으면, 다른 사람의 언어(이해)에 휩쓸려 버리죠.
프로그래밍 외적으로도 같으 단어가 비슷하게 쓰이는데 그 비슷함을 다시 프로그래밍에 적용하면 또 묘해지고...
시벌 그때 컨티뉴 패싱을 프로미스로 표기법을 바꾸면 비동시가 동시가 되는거라고 난리도 아니었음
아 이해됬습니다 않어렵게 이해됍니다 이해가 아주 쏙쏙된겉갓습니다 감사드리는거에요
+//됬->됐 (되어 = 돼임) [리듬 맞춤법 봇♬]
+//거에요->거예요 (받침 있으면 이에요 없으면 예요 이로 끝나면 받침 없으므로 예요 요 떼서 말 되면 에요 아니에요는 예외 인명엔 예요(예 : 길동이예요) 성까지 쓰면 이에요(예 : 홍길동이에요)) [리듬 맞춤법 봇♬]