본문 바로가기
C.W.K.
Stream
Lesson 02 of 05 · published

입력 리스

~12 min · lease, take-control, serialize, daemon, input

Level 0불씨
0 XP0/36 lessons0/12 achievements
0/100 XP to next level100 XP to go0% complete

Take Control 은 행위지 부작용이 아니야

입력 리스는 하나야. 데몬이 쥐고, 한 번에 붙은 표면 하나에 줘. Take Control 이 그걸 청하는 명시적 행위야. 탭은 그 행위가 아니야. 하드웨어 키보드가 나타나는 것도 아니야. 사이즈 클래스 변화도 아니야. 조종을 돌려주는 것도 명시적이야. 리스를 내려놓고, 구경꾼이 되고, 프로세스는 살아 있어. 리스를 얻는 게 암시면 지난 레슨의 기본값은 연극이었어. 놓는 게 자식을 죽이면 키보드랑 공장을 혼동한 거야.

데몬이 넘김을 직렬화해. 옛 쓰는 사람은 무효가 되고, 새 입력이 받아지기 전에 읽기 전용이 돼. 그 순서가 제품이야. 같은 밀리초에 쓰는 사람 둘은 같은 명령에 맥 글자 하나랑 폰 글자 하나가 들어가는 길이고, 그건 아무도 안 친 오타를 싣는 길이야. 마지막 바이트가 이긴다는 건 직렬화가 아니야. 이야기가 있는 레이스야.

프로세스는 손을 바꾸지 않아

리스를 잡아도 새 PTY 를 받지 않아. 새 자식을 받지 않아. 이미 있는 것에 칠 권리를 받고, 이전 표면은 그 권리를 잃어. 대화는 살아 있어. 저널은 저널이야. Anvil 자리는 Anvil 자리야. 옛 쓰는 사람의 프로세스를 죽이는 리스는 Take Control 버튼을 입은 닫기야. 폰에서 새 프로세스를 시작하는 리스는 트랙 5 가 거절한 두 번째 공장이야.

크롬이 누가 쥐었는지 말해야 해. 리스를 방금 잃은 맥 창은 구경꾼처럼 보여야 해. 거짓말 커서 없고, 입력이 다른 데 있다는 표시. 방금 얻은 폰은 조종자처럼 보여야 하고, 세션을 떠나지 않고도 리스를 내려놓을 수 있어야 해. 쥔 사람이 보이는 게, 투영 가족이 어둠 속에서 싸우지 않는 방법이야.

데몬이 창구야

표면은 투표하지 않아. 청해. 데몬만이 창구인 건 PTY 의 유일한 주인이라서야. 로컬 플래그를 세웠다고 리스를 쥐었다고 믿는 폰은, 맥이 이미 되찾아도 치게 되는 폰이야. 진실의 원천은 데몬 쪽 부여야. 이 부착, 이 세션, 이 생애. 트랙 6 의 다음 레슨이 재연결이 그 부여를 재생하지 않는다고 말할 거야. 여기 주장은 더 작아. 살아있는 부착도 자기를 믿으면 안 돼. 창구를 믿어.

쓰는 사람 둘 모드를 거절해. "둘 다 쳐도 돼, 조심할게"도. 조심은 직렬화기가 아니야. 가족은 이미 치지 않는 문이 있어. 데스크톱이랑 나란히 치는 주머니를 키우면 안 돼. 리스 하나, 쓰는 사람 하나, 프로세스 살아 있음, 옛 쓰는 사람은 읽기 전용. 그게 트릭의 전부야. 이 트랙의 나머지는 그 트릭이 잠금 화면을 만날 때야.

리스는 데몬이 직렬화하고, 하나야. Take Control 은 명시적이야. 옛 쓰는 사람은 새 입력이 받아지기 전에 읽기 전용이 돼. 프로세스는 살아 있어. 쓰는 사람 둘은 레이스지 기능이 아니야.

Code

넘김 순서, 그게 제품이야·text
Take Control from surface B, lease currently on A:
  1. B asks the daemon (not a local flag)
  2. daemon invalidates A  -> A is spectator, read-only chrome
  3. daemon grants B       -> B is controller
  4. only then admit B's input
  5. child / PTY / journal unchanged

Return Control from B:
  1. B asks the daemon
  2. daemon releases grant
  3. B is spectator
  4. nobody holds input until someone Takes Control
  5. child still alive

# Illegal
  last-byte-wins between A and B
  B sets local isController = true and types
  Take Control kills A's process
  Take Control starts a new PTY on B
  implicit take on keyboard-attach or tap

External links

Exercise

맥이 치는 중에 폰이 Take Control 을 탭할 때의 다섯 단계 넘김을 써. 맥이 키를 받으면 안 되는 첫 순간, 폰이 받아도 되는 첫 순간을 표시해. 그 순간이 같은 즉시면 아직 레이스야. 그다음 3단계 뒤 각 유리가 보여야 할 크롬을 써.
Hint
맥의 마지막 합법 키는 무효화가 끝나기 전이야. 폰의 첫 합법 키는 부여 다음이야. 자식은 창구 소식을 듣지 않아.

Progress

Progress is local-only — sign in to sync across devices.
이 페이지에서 버그를 발견하셨거나 피드백이 있으세요?문제 신고

댓글 0

🔔 답글 알림 (로그인 필요)
로그인댓글을 남기려면 로그인해 주세요.

아직 댓글이 없어요. 첫 댓글을 남겨보세요.