개발 Q&A

제목 Coroutine방식, Async방식 차이와 적용범위 질문
카테고리 기타
글쓴이 QIO™ 작성시각 2020/12/09 18:13:26
댓글 : 3 추천 : 0 스크랩 : 0 조회수 : 7104   RSS

최근 실시간 처리에 관심을 가지다 보니 기존에 알지 못했던 용어들이 많이 나오네요 ㅜㅜ

이것 외에도 blocking, non-blocking방식도 있더군요.

 

저의 뇌피셜이지만 실시간 처리에 관심을 가질수록 고전역학과 양자역학의 개념처럼 속도가 느릴때는 위의 개념들이 크게 영향이 없는데

실시간(최소 0.01초미만 간격으로 데이터가 들어옴) 처리에는 여러가지 문제들이 발생하더군요.

 

먼저 제가 이 개념들을 정확히 알지 못하고 경험적으로 파악한것을 기준으로 이해했고 질문드린다는점을 양해해 주시기 바랍니다.

 

제가 현재 아는 개념은 blocking은 어떤 함수가 데이터 처리중에는 새로운 데이터가 들어와도 

기존 데이터가 처리될 동안 새로운 데이터는 대기열(queue)에 넣어놓고 기존 데이터 처리가 완료되면 순차적으로 다음 데이터를 처리하는 방식이고

non-blocking은 기존 데이터가 처리중에 새로운 데이터가 들어오면 아예 새로운 프로세서(함수 또는 쓰레드...)를 생성해서 처리하는 것으로 현재는 이해하고 있습니다.

 

아무튼 그래서 현실적으로 기록(update)과 표현(display) 그리고 데이터처리(processing)의 문제가 발생하더군요.

기록은 DB에 하고 표현은 화면에 하고 데이터처리는 CPU에서 하는데

 

이게 시간 딜레이도 생기고 

 

또 어떤경우는 기존 데이터처리가 되어야 다음 데이터 처리로 넘어가는게 맞는 경우도 있더라구요.

이게 최소 0.01초 단위로 데이터가 들어올때 완벽하지는 않더라도 처리하는 방법이 있을까요?

 

정말 어렵네요 ㅜㅜ

 

혹시 비슷한 문제를 경험한분이 계시면 정보교류를했으면 합니다.

 

 다음글 url을 mysql REGEXP_REPLACE로 처리를... (4)
 이전글 신규 도메인으로 리다이렉션 문의. (2)

댓글

변종원(웅파) / 2020/12/09 18:28:02 / 추천 0

db를 사용한다는 전제로

select lock도 가능해서 하나의 프로세스가 진행중에 다른 프로세스를 막으려면 db lock을 걸고 처리하면 됩니다. 단, 프로세스가 많아지고 로직이 복잡해지면 dead lock이 생겨서 db가 죽어버릴 수 있습니다.

여러개의 프로세스에서 동시작업을 해도 되는 영역과 동시작업을 하면 안되는 영역을 구분해서 작업을 하시면 될것 같습니다.

증권쪽에선 각각의 브로커가 각자의 일을 하는 구조로 작동을 합니다. 

(dead lock으로 db가 죽어서 그걸 개선하는 프로젝트(비트코인 관련)를 진행하면서 증권(c로 만든 브로커)쪽 구조를 

경험해서 드리는 말씀입니다. 

어찌됐던 받아들이는 쪽은 큐이어야 하고 이후는 분산처리.. 뭐 그렇습니다.

한대승(불의회상) / 2020/12/09 19:32:01 / 추천 0

corutine이든 async든 실시간과는 거리가 뭡니다.

linux 자체가 시분할 OS라는 것도 있구요.

진정한 리얼타임은 RT-OS로.... 그러면 언어가 PHP로는 안되는걸지도...

QIO™ / 2020/12/10 09:57:11 / 추천 0

웅파님 불의회상님 두분 답변 감사합니다 ^^

웅파님의 말씀대로 동시작업이 필요한 영역과 순차적으로 처리해야 하는 영역을 구분하고

이 두 영역을 어떻게 처리하면 실시간 처리하는데 문제가 발생하지 않는지 구체적인 로직을 새워봐야 할것 같습니다.

혼자 고민할때는 어렵게만 생각되었는데 해법이 보여지는것 같네요 ^^