SlideShare a Scribd company logo
Concurrent Programming in
JavaScript
SEINO Yoshinori
Sapporo.js
自己紹介
• 情野 吉紀
• 職業 デバッガー
• プログラミング好き
• 趣味プログラミングしない
• JavaScriptほとんど書かない
おしながき
• 導入
• カタログ
• 未来
• 導入
• 並行プログラミングカタログ
• 未来
メリット
• なんでしょう?
• JavaScript 1スレッドしかないよね?
JSスレッドモデル
• シングルスレッドのように振る舞う
• デッドロック、競合状態と無縁
• WebWorkerについては後でね
• サイ本6版 p.352
• 13.3.3 クライアントサイドJavaScriptスレッドモデル
メリット
• 複数の処理を並行に実行できると
• scriptロード
• ユーザ入力応答
• 通信
• DOM操作
• などを、待機時間なしに実行できる
デメリット
• なんでしょう?
デメリット
• キュータスク処理時間は50msec以下
• 続・ハイパフォーマンスWebサイト
• メンテナンス性の低下
• デバッグの難化
• 実行順序が非決定的
どうにかならないの?
• 導入
• 並行プログラミングカタログ
• 未来
カタログ
• コールバックネスト
• setTimeoutイディオム
• Web Workers
• node.jsスタイルAPI
• Promise/A(+)
• Flow.js ( NOT Flow-js )
コールバックネスト
• ユースケース
• 非同期API
setTimeoutイディオム
• ユースケース
• ユーザ応答性を高めるために処理を
分割したい
• 続・ハイパフォーマンスWebプログラミング
• http://please-sleep.cou929.nu/using-javascript-timer-for-ui-
performance.html
Web Workers
• ユースケース
• ユーザ応答性を高めるために処理を
分割したい
• とりわけ重い処理(100ms over)を並行
処理したい
• Web Workers
node.jsスタイルAPI
• ユースケース
• node.jsアプリケーションを作る際に
書く
• http://dev.classmethod.jp/server-
side/asyn/
Promise/A(+)
• ユースケース
• 非同期API間でデータを引き継ぐ場合
• 例外処理が必要な場合
Flow.js
• ユースケース
• 処理フローがグラフ構造のように複
雑になる場合
未来
• Web Workers
• Task.js - http://taskjs.org/
• generators + promises = tasks
• Fiber - https://npmjs.org/package/fibers
• Actor -
参考文献
• JavaScript 第6版
次回予告
• Io : Prototype Programming Language
• JavaScript: Power of Simplicity Part2
Functional Programming

More Related Content

PDF
JavaScriptと共に歩いて行く決意をした君へ
PDF
Getting start with knockout.js
PDF
Vue.js ハンズオン資料
PDF
jQueryを中心としたJavaScript
PDF
究極にして至高のWAF
PDF
Flux react現状確認会
PDF
JavaScript 研修
PDF
まだ DOM 操作で消耗してるの?
JavaScriptと共に歩いて行く決意をした君へ
Getting start with knockout.js
Vue.js ハンズオン資料
jQueryを中心としたJavaScript
究極にして至高のWAF
Flux react現状確認会
JavaScript 研修
まだ DOM 操作で消耗してるの?

What's hot (17)

PDF
a-blogcsm な寺子屋 2 in Okazaki
PDF
なぜ人は必死でjQueryを捨てようとしているのか
PDF
React+fluxを導入した話
PDF
Cssアニメーションとその制御
PDF
a-sap09「a-blog cmsとWordPress」
PDF
軽量フレームワークNancy
PDF
( ゚∀゚)o彡° Flux! Flux!
PDF
Learning jQuery
PDF
Gulp De wordpress in WordBench
PDF
E2E CSS Testing at HTML5 Conference 2016
PPTX
webアプリケーションフレームワークの話
PDF
svelte と tailwind で始めるフロントエンド開発
PDF
WordPress ユーザーのための a-blog cms 入門
PDF
Javaな人が気を付けるべきJavaScriptコーディングスタイル
PDF
WebフレームワークXSS対策の自動化
PDF
Ember コミュニティとわたし
PDF
SIROK技術勉強会 #1 「Reactってなんだ?」
a-blogcsm な寺子屋 2 in Okazaki
なぜ人は必死でjQueryを捨てようとしているのか
React+fluxを導入した話
Cssアニメーションとその制御
a-sap09「a-blog cmsとWordPress」
軽量フレームワークNancy
( ゚∀゚)o彡° Flux! Flux!
Learning jQuery
Gulp De wordpress in WordBench
E2E CSS Testing at HTML5 Conference 2016
webアプリケーションフレームワークの話
svelte と tailwind で始めるフロントエンド開発
WordPress ユーザーのための a-blog cms 入門
Javaな人が気を付けるべきJavaScriptコーディングスタイル
WebフレームワークXSS対策の自動化
Ember コミュニティとわたし
SIROK技術勉強会 #1 「Reactってなんだ?」
Ad

Similar to Concurrent Programming in JavaScript (20)

PDF
JavaScriptトレンド総括(2014)
PDF
サーバサイドエンジニアが 1年間まじめにSPAやってみた
PDF
Play jjug2012spring
PDF
多分モダンなWebアプリ開発
PDF
WebStormでできること
PPTX
Jsf アプリ作ったった
PDF
React es2015
PDF
JSer Class #2
PPTX
2016/12/17 ASP.NET フロントエンドタスク入門
PDF
Gruntの罪と罰
KEY
Rdbms起点で考えると見えない世界 okuyama勉強会
PDF
現在のWebフロントエンドの現状と愚痴と、それに対するHaxeフロントエンドライブラリMageについて
PDF
javascript を Xcode でテスト
PDF
Javaで1から10まで書いた話(sanitized)
PDF
20120407 ASP.NET+C#で開発する大規模ソーシャルゲーム
PDF
Azure Functionsでサーバーレスアプリケーション構築
PPTX
ビルド職人の朝は早い
PDF
Visual Studio 2012 と ASP.NET に見る、最新 Web 開発の魅力
PDF
RDB経験者に送るMongoDBの勘所(db tech showcase tokyo 2013)
PPTX
Type scriptmemo
JavaScriptトレンド総括(2014)
サーバサイドエンジニアが 1年間まじめにSPAやってみた
Play jjug2012spring
多分モダンなWebアプリ開発
WebStormでできること
Jsf アプリ作ったった
React es2015
JSer Class #2
2016/12/17 ASP.NET フロントエンドタスク入門
Gruntの罪と罰
Rdbms起点で考えると見えない世界 okuyama勉強会
現在のWebフロントエンドの現状と愚痴と、それに対するHaxeフロントエンドライブラリMageについて
javascript を Xcode でテスト
Javaで1から10まで書いた話(sanitized)
20120407 ASP.NET+C#で開発する大規模ソーシャルゲーム
Azure Functionsでサーバーレスアプリケーション構築
ビルド職人の朝は早い
Visual Studio 2012 と ASP.NET に見る、最新 Web 開発の魅力
RDB経験者に送るMongoDBの勘所(db tech showcase tokyo 2013)
Type scriptmemo
Ad

Concurrent Programming in JavaScript

Editor's Notes

  • #4: 動機 - JavaScriptプログラムを書いてて並行プログラミングをしなければ行けなくなる理由は? 並行プログラミングカタログ - 並行プログラミング技法は何十年も前から研究されているが、一方で現在のJavaScriptではどんなプログラミング技法が使えるの? 未来 - 現在主流となっている並行プログラミング技法、そしてEcmaScript6の仕様からJavaScriptの未来の並行プログラミング技法をイメージします。
  • #5: 動機 - JavaScriptプログラムを書いてて並行プログラミングをしなければ行けなくなる理由は?
  • #7: サーバーサイドは@tricknotesに聞いてください。 node.js はプロセスをフォークしてプロセス間通信するっぽい。OSネイティブなプロセス間通信プログラミング。 RhinoとかはたぶんJavaThreadじゃね?(投げやり)
  • #9: ATMの例 札幌駅地下街のアピアにはATMたくさんあります。 複数の金融機関それぞれについて複数台あり、通路が待っている人であふれないようになっています。 仮に、1台しかATMがなかったとします。 人がたくさん並びます。対策をとらないとすぐに人であふれてしまいます。 どんな対策をとりますか? 答えは、一人一人の持ち時間を設定することです。
  • #10: メンテナンス性の低下ってのは、著しく読みづらくなる、属人性の高いコードが生まれやすい
  • #12: 動機 - JavaScriptプログラムを書いてて並行プログラミングをしなければ行けなくなる理由は?
  • #15: Web
  • #20: Web Workers 共有ワーカー 名古屋にお住まいの @bleis おにいちゃんが発表した async/await 不要論 http://bleis-tift.hatenablog.com/entry/asyncawaitdis F# computation式 asyncワークフロー