LoginSignup
4
6

More than 5 years have passed since last update.

WHATWG Streams の Lock

Last updated at Posted at 2016-10-26

概要

WHATWG Streams のことを何回かに分けて書く。Kyoto.js #11 の『 WHATWG Streams をためした 』という発表のために調べたものだ。発表だけで終わらせるのはもったいないので、再整理して共有する。

前回は『 WHATWG Streams の Source と Sink - Qiita 』。今回は Lock のことを書く。

Lock

  • ReadableStream (以下 RS) / WritableStream (以下 WS) には Lock 状態がある
  • RS / WS の Reader / Writer が確保されているとき、Lock される
  • Lock されると、他の Reader / Writer は RS / WS を読み書きできない
  • RS / WS の get locked(): boolean で Lock されているかを確認できる
  • ぼくは Node.js Stream とは大きく異なる点だと思う

RS の読み取り操作

  • pipeTo(writable: WS): Promise<void> …… WS に pipe
  • pipeThrough(transform: TS): RS …… TS に pipe
  • tee(): [RS, RS] …… RS を分岐
  • getReader(): Reader …… 上 3 つの内部から呼ばれる低レベルな操作

すべての読み取り操作は getReader() につながる。そして getReader() は Lock を確保する。

Reader

  • Reader は RS の internal queue を dequeue できるもの
  • getReader() でその RS の Reader を確保できる
  • ひとつの RS につき、同時にひとつの Reader しか確保できない
    • おそらく複数 Reader での読み込みによる漏れを防ぐため
  • Reader を開放することで新たな Reader を確保できる
  • ぼくは「 getXXX() が破壊的な操作ってどうなのよ」と思う

WS / Writer

RS と同様。

参考

4
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
6