Soumettre la recherche
Mettre en ligne
Poolboy
•
0 j'aime
•
1,474 vues
Yusuke Muraoka
Suivre
Introducing Poolboy at Riak Source Code Reading.
Lire moins
Lire la suite
Technologie
Signaler
Partager
Signaler
Partager
1 sur 16
Télécharger maintenant
Télécharger pour lire hors ligne
Recommandé
Local php-100828 2
Local php-100828 2
Akio Ishida
Lightweight Language Tiger 2010
Lightweight Language Tiger 2010
biscuitjam
omoon.org の裏側 〜FuelPHP の task 活用例〜
omoon.org の裏側 〜FuelPHP の task 活用例〜
Sotaro Omura
0x300
0x300
geek_alice
実用裏方 Perl 入門
実用裏方 Perl 入門
keroyonn
Stroustrup11章雑感
Stroustrup11章雑感
31 00
Node.js × 音声認識 - 東京Node学園 2012 LT枠 6番目
Node.js × 音声認識 - 東京Node学園 2012 LT枠 6番目
hecomi
Perlで伝統芸能
Perlで伝統芸能
hitode909
Recommandé
Local php-100828 2
Local php-100828 2
Akio Ishida
Lightweight Language Tiger 2010
Lightweight Language Tiger 2010
biscuitjam
omoon.org の裏側 〜FuelPHP の task 活用例〜
omoon.org の裏側 〜FuelPHP の task 活用例〜
Sotaro Omura
0x300
0x300
geek_alice
実用裏方 Perl 入門
実用裏方 Perl 入門
keroyonn
Stroustrup11章雑感
Stroustrup11章雑感
31 00
Node.js × 音声認識 - 東京Node学園 2012 LT枠 6番目
Node.js × 音声認識 - 東京Node学園 2012 LT枠 6番目
hecomi
Perlで伝統芸能
Perlで伝統芸能
hitode909
Functions
Functions
do_aki
pecl-AOPの紹介
pecl-AOPの紹介
Hiraku Nakano
Synthesijer hls 20150116
Synthesijer hls 20150116
Takefumi MIYOSHI
node.jsによる お手軽画像uploader実装
node.jsによる お手軽画像uploader実装
Yohei Fushii
C# ドキドキ ライブ コーディング!! ~ 小島の分 ~ | BuriKaigi 2020
C# ドキドキ ライブ コーディング!! ~ 小島の分 ~ | BuriKaigi 2020
Fujio Kojima
test
test
a1yama1123
コマンド実行結果のログ取得について
コマンド実行結果のログ取得について
Koji Kawaguchi
Testman
Testman
makoto tsuyuki
Continuation with Boost.Context
Continuation with Boost.Context
Akira Takahashi
C++でHello worldを書いてみた
C++でHello worldを書いてみた
firewood
Mock and patch
Mock and patch
Toru Furukawa
あらためてPHP5.3
あらためてPHP5.3
Masashi Shinbara
自作saoriの紹介
自作saoriの紹介
wizstargaer
CPANの依存モジュールをもう少し正しく検出したい
CPANの依存モジュールをもう少し正しく検出したい
charsbar
Dev club season 2 extensionsapi workshop
Dev club season 2 extensionsapi workshop
Hiroshi Masuda
CakePHP+Smartyハイブリッドによるラクラク開発
CakePHP+Smartyハイブリッドによるラクラク開発
Shinzo SAITO
『How to build a High Performance PSGI/Plack Server』のその後と ISUCON3を受けての話題
『How to build a High Performance PSGI/Plack Server』のその後と ISUCON3を受けての話題
Masahiro Nagano
C# 式木 (Expression Tree) ~ LINQをより深く理解するために ~
C# 式木 (Expression Tree) ~ LINQをより深く理解するために ~
Fujio Kojima
Tableau Developers Club Season2 /*TableauのAPIすべて*/ Tableau JavaScript API編
Tableau Developers Club Season2 /*TableauのAPIすべて*/ Tableau JavaScript API編
Hiroshi Masuda
The Substance D - Plone Symposium Tokyo 2015
The Substance D - Plone Symposium Tokyo 2015
Yusuke Muraoka
Debug it-python-hack-a-thon-2011.02
Debug it-python-hack-a-thon-2011.02
Yusuke Muraoka
Django learning
Django learning
Yusuke Muraoka
Contenu connexe
Tendances
Functions
Functions
do_aki
pecl-AOPの紹介
pecl-AOPの紹介
Hiraku Nakano
Synthesijer hls 20150116
Synthesijer hls 20150116
Takefumi MIYOSHI
node.jsによる お手軽画像uploader実装
node.jsによる お手軽画像uploader実装
Yohei Fushii
C# ドキドキ ライブ コーディング!! ~ 小島の分 ~ | BuriKaigi 2020
C# ドキドキ ライブ コーディング!! ~ 小島の分 ~ | BuriKaigi 2020
Fujio Kojima
test
test
a1yama1123
コマンド実行結果のログ取得について
コマンド実行結果のログ取得について
Koji Kawaguchi
Testman
Testman
makoto tsuyuki
Continuation with Boost.Context
Continuation with Boost.Context
Akira Takahashi
C++でHello worldを書いてみた
C++でHello worldを書いてみた
firewood
Mock and patch
Mock and patch
Toru Furukawa
あらためてPHP5.3
あらためてPHP5.3
Masashi Shinbara
自作saoriの紹介
自作saoriの紹介
wizstargaer
CPANの依存モジュールをもう少し正しく検出したい
CPANの依存モジュールをもう少し正しく検出したい
charsbar
Dev club season 2 extensionsapi workshop
Dev club season 2 extensionsapi workshop
Hiroshi Masuda
CakePHP+Smartyハイブリッドによるラクラク開発
CakePHP+Smartyハイブリッドによるラクラク開発
Shinzo SAITO
『How to build a High Performance PSGI/Plack Server』のその後と ISUCON3を受けての話題
『How to build a High Performance PSGI/Plack Server』のその後と ISUCON3を受けての話題
Masahiro Nagano
C# 式木 (Expression Tree) ~ LINQをより深く理解するために ~
C# 式木 (Expression Tree) ~ LINQをより深く理解するために ~
Fujio Kojima
Tableau Developers Club Season2 /*TableauのAPIすべて*/ Tableau JavaScript API編
Tableau Developers Club Season2 /*TableauのAPIすべて*/ Tableau JavaScript API編
Hiroshi Masuda
Tendances
(19)
Functions
Functions
pecl-AOPの紹介
pecl-AOPの紹介
Synthesijer hls 20150116
Synthesijer hls 20150116
node.jsによる お手軽画像uploader実装
node.jsによる お手軽画像uploader実装
C# ドキドキ ライブ コーディング!! ~ 小島の分 ~ | BuriKaigi 2020
C# ドキドキ ライブ コーディング!! ~ 小島の分 ~ | BuriKaigi 2020
test
test
コマンド実行結果のログ取得について
コマンド実行結果のログ取得について
Testman
Testman
Continuation with Boost.Context
Continuation with Boost.Context
C++でHello worldを書いてみた
C++でHello worldを書いてみた
Mock and patch
Mock and patch
あらためてPHP5.3
あらためてPHP5.3
自作saoriの紹介
自作saoriの紹介
CPANの依存モジュールをもう少し正しく検出したい
CPANの依存モジュールをもう少し正しく検出したい
Dev club season 2 extensionsapi workshop
Dev club season 2 extensionsapi workshop
CakePHP+Smartyハイブリッドによるラクラク開発
CakePHP+Smartyハイブリッドによるラクラク開発
『How to build a High Performance PSGI/Plack Server』のその後と ISUCON3を受けての話題
『How to build a High Performance PSGI/Plack Server』のその後と ISUCON3を受けての話題
C# 式木 (Expression Tree) ~ LINQをより深く理解するために ~
C# 式木 (Expression Tree) ~ LINQをより深く理解するために ~
Tableau Developers Club Season2 /*TableauのAPIすべて*/ Tableau JavaScript API編
Tableau Developers Club Season2 /*TableauのAPIすべて*/ Tableau JavaScript API編
En vedette
The Substance D - Plone Symposium Tokyo 2015
The Substance D - Plone Symposium Tokyo 2015
Yusuke Muraoka
Debug it-python-hack-a-thon-2011.02
Debug it-python-hack-a-thon-2011.02
Yusuke Muraoka
Django learning
Django learning
Yusuke Muraoka
プロパティディスクリプタとその拡張ライブラリ
プロパティディスクリプタとその拡張ライブラリ
Yusuke Muraoka
App Engineと非同期とテストと私
App Engineと非同期とテストと私
Yusuke Muraoka
Django learning Part2
Django learning Part2
Yusuke Muraoka
En vedette
(6)
The Substance D - Plone Symposium Tokyo 2015
The Substance D - Plone Symposium Tokyo 2015
Debug it-python-hack-a-thon-2011.02
Debug it-python-hack-a-thon-2011.02
Django learning
Django learning
プロパティディスクリプタとその拡張ライブラリ
プロパティディスクリプタとその拡張ライブラリ
App Engineと非同期とテストと私
App Engineと非同期とテストと私
Django learning Part2
Django learning Part2
Similaire à Poolboy
VerilatorとSystemC
VerilatorとSystemC
Mr. Vengineer
OpenFlowコントローラ開発支援ツールの提案
OpenFlowコントローラ開発支援ツールの提案
Yutaka Yasuda
Tottoruby 20110903
Tottoruby 20110903
Takashi SAKAGUCHI
hktstudy 201206 「私だってやれば出来る子!♥Multi-Mechanize♥」
hktstudy 201206 「私だってやれば出来る子!♥Multi-Mechanize♥」
Aya Komuro
for JSDeferred Code Reading
for JSDeferred Code Reading
Kenichirou Oyama
「スピード」と「品質」を実現するPHP開発チームの取り組み~AngularJS+FuelPHP+AspectMock~
「スピード」と「品質」を実現するPHP開発チームの取り組み~AngularJS+FuelPHP+AspectMock~
leverages_event
Boost9 session
Boost9 session
freedom404
Replace Output Iterator and Extend Range JP
Replace Output Iterator and Extend Range JP
Akira Takahashi
MySQLとPostgreSQLの基本的な実行プラン比較
MySQLとPostgreSQLの基本的な実行プラン比較
Shinya Sugiyama
Perl 非同期プログラミング
Perl 非同期プログラミング
lestrrat
EC-CUBEプラグイン講義
EC-CUBEプラグイン講義
ria1201
3時間濃縮CakePHP2.1 in PHPカンファレンス北海道2012
3時間濃縮CakePHP2.1 in PHPカンファレンス北海道2012
Yusuke Ando
Development app-with-elixir
Development app-with-elixir
k1complete
そうだったのか! よくわかる process.nextTick() node.jsのイベントループを理解する
そうだったのか! よくわかる process.nextTick() node.jsのイベントループを理解する
shigeki_ohtsu
Azure で Serverless 初心者向けタッチ&トライ
Azure で Serverless 初心者向けタッチ&トライ
Masanobu Sato
20150207コデアルエンジニア学生向けハッカソン就活イベント発表資料
20150207コデアルエンジニア学生向けハッカソン就活イベント発表資料
codeal
Similaire à Poolboy
(16)
VerilatorとSystemC
VerilatorとSystemC
OpenFlowコントローラ開発支援ツールの提案
OpenFlowコントローラ開発支援ツールの提案
Tottoruby 20110903
Tottoruby 20110903
hktstudy 201206 「私だってやれば出来る子!♥Multi-Mechanize♥」
hktstudy 201206 「私だってやれば出来る子!♥Multi-Mechanize♥」
for JSDeferred Code Reading
for JSDeferred Code Reading
「スピード」と「品質」を実現するPHP開発チームの取り組み~AngularJS+FuelPHP+AspectMock~
「スピード」と「品質」を実現するPHP開発チームの取り組み~AngularJS+FuelPHP+AspectMock~
Boost9 session
Boost9 session
Replace Output Iterator and Extend Range JP
Replace Output Iterator and Extend Range JP
MySQLとPostgreSQLの基本的な実行プラン比較
MySQLとPostgreSQLの基本的な実行プラン比較
Perl 非同期プログラミング
Perl 非同期プログラミング
EC-CUBEプラグイン講義
EC-CUBEプラグイン講義
3時間濃縮CakePHP2.1 in PHPカンファレンス北海道2012
3時間濃縮CakePHP2.1 in PHPカンファレンス北海道2012
Development app-with-elixir
Development app-with-elixir
そうだったのか! よくわかる process.nextTick() node.jsのイベントループを理解する
そうだったのか! よくわかる process.nextTick() node.jsのイベントループを理解する
Azure で Serverless 初心者向けタッチ&トライ
Azure で Serverless 初心者向けタッチ&トライ
20150207コデアルエンジニア学生向けハッカソン就活イベント発表資料
20150207コデアルエンジニア学生向けハッカソン就活イベント発表資料
Plus de Yusuke Muraoka
いかにして問題をとくか
いかにして問題をとくか
Yusuke Muraoka
Pythonistaで始めるiOSプロトタイプ開発
Pythonistaで始めるiOSプロトタイプ開発
Yusuke Muraoka
私のPythonとの関わりかた
私のPythonとの関わりかた
Yusuke Muraoka
Substance D world-plone-day-2017
Substance D world-plone-day-2017
Yusuke Muraoka
Pythonistaの使い方
Pythonistaの使い方
Yusuke Muraoka
Gunma.web #24 MySQL HA
Gunma.web #24 MySQL HA
Yusuke Muraoka
Pyramid Security
Pyramid Security
Yusuke Muraoka
Some about chef
Some about chef
Yusuke Muraoka
Can A Python Go Beyond The Python
Can A Python Go Beyond The Python
Yusuke Muraoka
Plus de Yusuke Muraoka
(9)
いかにして問題をとくか
いかにして問題をとくか
Pythonistaで始めるiOSプロトタイプ開発
Pythonistaで始めるiOSプロトタイプ開発
私のPythonとの関わりかた
私のPythonとの関わりかた
Substance D world-plone-day-2017
Substance D world-plone-day-2017
Pythonistaの使い方
Pythonistaの使い方
Gunma.web #24 MySQL HA
Gunma.web #24 MySQL HA
Pyramid Security
Pyramid Security
Some about chef
Some about chef
Can A Python Go Beyond The Python
Can A Python Go Beyond The Python
Dernier
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
CRI Japan, Inc.
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
iPride Co., Ltd.
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NTT DATA Technology & Innovation
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
iPride Co., Ltd.
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
iPride Co., Ltd.
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
CRI Japan, Inc.
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
Hiroshi Tomioka
Dernier
(7)
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
Poolboy
1.
Poolboy Erlang入門
2.
お前誰よ • 村岡友介 • @jbking •
Python, JS with TypedArray • OTP使いこなしたい • Emacs久しぶりにインストール
3.
ワーカープール
使ってますよね? • pg_pool • ThreadPoolExecutor • MPM worker/prefork
4.
なぜワーカープールを
使いたいか • 重い初期化処理を何回もやりたくない • 初期化済みですぐ結果を返したい • リソースの同時使用を制限したい
5.
Poolboy 2a03513
6.
Usage
プール名 (atom() as node()) squery(PoolName, Sql) -> poolboy:transaction(PoolName, fun(Worker) -> gen_server:call(Worker, {squery, Sql}) end). ワーカープロセス (pid()) gen_serverの下でワーカープロセスと 通信する
7.
ワーカー定義 • -behaviour(gen_server). • -behaviour(poolboy_worker).
• start_link/1 単なるgen_serverだよ!
8.
Internal
9.
Initialize % poolboy.erl:77 start(PoolArgs, WorkerArgs)
-> start_pool(start, PoolArgs, WorkerArgs). % poolboy.erl:89 start_link(PoolArgs, WorkerArgs) -> start_pool(start_link, PoolArgs, WorkerArgs). % poolboy.erl:223 ワーカープール初期化 start_pool(StartFun, PoolArgs, WorkerArgs) -> case proplists:get_value(name, PoolArgs) of undefined -> gen_server:StartFun(?MODULE, {PoolArgs, WorkerArgs}, []); Name -> gen_server:StartFun(Name, ?MODULE, {PoolArgs, WorkerArgs}, end.
10.
Initialize
gen_server module Callback module ----------------- --------------- gen_server:start_link -----> Module:init/1 % poolboy.erl:91 ワーカープール初期化 init({PoolArgs, WorkerArgs}) -> process_flag(trap_exit, true), Waiting = queue:new(), Monitors = ets:new(monitors, [private]), State構築 init(PoolArgs, WorkerArgs, #state{waiting = Waiting, monitors = Mon poolboyプール自身も gen_serverの下で動いている
11.
Transaction
さっきのpoolboy:transaction/3 % poolboy.erl:48 プールからワーカーを取り出して transaction(Pool, Fun, Timeout) -> Worker = poolboy:checkout(Pool, true, Timeout), try Fun(Worker) 実行して after ok = poolboy:checkin(Pool, Worker) end. 終わったらプールに戻す
12.
Checkout % poolboy.erl:133 handle_call({checkout, Block,
Timeout}, {FromPid, _} = From, State) -> #state{supervisor = Sup, workers = Workers, monitors = Monitors, overflow = Overflow, max_overflow = MaxOverflow} = State, case queue:out(Workers) of {{value, Pid}, Left} -> プールからPidを取り出す Ref = erlang:monitor(process, FromPid), true = ets:insert(Monitors, {Pid, Ref}), {reply, Pid, State#state{workers = Left}}; {empty, Empty} when MaxOverflow > 0, Overflow < MaxOverflow -> ... プロセスをモニターに登録
13.
Checkin % poolboy.erl:119 handle_cast({checkin, Pid},
State = #state{monitors = Monitors}) -> case ets:lookup(Monitors, Pid) of [{Pid, Ref}] -> モニターから解除 true = erlang:demonitor(Ref), true = ets:delete(Monitors, Pid), NewState = handle_checkin(Pid, State), {noreply, NewState}; [] -> 待ちプロセスにワーカーを {noreply, State} end; 割り当てる
14.
Worker may crash
15.
Monitor/Trap % poolboy.erl:180
Monitor handle_info({'DOWN', Ref, _, _, _}, State) -> case ets:match(State#state.monitors, {'$1', Ref}) of [[Pid]] -> ... [] -> ... end; Trap handle_info({'EXIT', Pid, _Reason}, State) -> #state{supervisor = Sup, monitors = Monitors} = State, case ets:lookup(Monitors, Pid) of [{Pid, Ref}] -> ... [] -> ... end;
16.
おわり
Télécharger maintenant