したらばTOP ■掲示板に戻る■ 全部 1-100 最新50 | |

コンソールの2chブラウザを作るスレッド

64ひきぷろ ◆SVQfrniSJY:2017/03/23(木) 08:19:06 ID:???0
ダウンロードの処理についてのお話だけど、IOはプログラミング一般のお話としては

・ブロッキングIO
・ノンブロッキングIO

っていう種類分けができる。

Go言語の実装がどうなってるのか分からないけど、
JavaScriptの場合は、おおよそIOの処理がノンブロッキングIOになってることが多いみたいで、
ノンブロッキングIOだと、UIスレッド1本でIOを処理できる。

CPUの状態がブロッキングにならないから、コード的にいうと次の処理がウエイトなしで実行される。
古典的な方法では、処理の終了通知は、コールバック関数を引数で渡して通知してもらう構造になる。
(JavaScriptの場合はsetTimeout関数とか、そういう処理のイメージ)

ブロッキングIOを使う場合は、

・IOの処理を別スレッドで実行する
・UIと同じスレッドで実行して、UIのレスポンスを待ち状態にする

の、いずれかの状態になる。

IOの処理を別スレッドで実行する場合は、

・スレッド終了時に通知する
・スレッドの処理の途中で(終了を待たずに)、通知するタイミングを何度か設ける

っていう風に分類できると思う。
通知の処理は、デザインパターンでいうと、オブザーバーパターンで実装すると分かりやすそう。

別スレッドからUIスレッドに通知する時に、スレッドをまたいだことで発生する問題は、C#でいうと、
別スレッドから呼び出された関数を、UIスレッドで呼びなおす
っていう処理が実行できる。

上に書いたようなことを考慮すれば、ロック機構なしでうまく実装できると思う。
マルチスレッドプログラミングの経験はそんなにないけど、
ロックを使ったコードがあると、その周辺は容易に変更できないコードになるような気がする。


新着レスの表示


名前: E-mail(省略可)

※書き込む際の注意事項はこちら

※画像アップローダーはこちら

(画像を表示できるのは「画像リンクのサムネイル表示」がオンの掲示板に限ります)

掲示板管理者へ連絡 無料レンタル掲示板