[
板情報
|
カテゴリランキング
]
したらば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
(省略可)
:
※書き込む際の注意事項は
こちら
※画像アップローダーは
こちら
(画像を表示できるのは「画像リンクのサムネイル表示」がオンの掲示板に限ります)
スマートフォン版
掲示板管理者へ連絡
無料レンタル掲示板