猫型です。Niigata.llの開催おめでとうございます。行けなくてくやしいです。資料だけここに公開します。タイトルは「Perlなめんな」です。dis られがちなオブジェクトシステムと例外機構の貧弱さについて現代的な Perl の視点から回答します。
「素のPerlのオブジェクトシステムは貧弱すぎる」。その通りです、でも Mouse とかを使えば結構素直に書けるのです。
gogoutineてGOMAXPROCSを設定しない限りはシングルスレッドなんですねえ。 | |
GOMAXPROCSはもうちょっとだけ複雑です。 | |
同時に動けるgoroutineの数の制限なのですが、 | |
read などのブロックするかもしれないシステムコールを発行する場合、発行前に「現在実行中のゴルーチン数」をデクリメントして、 | |
システムコールから返ってきたらそれをインクリメントします。 | |
で、デクリメントした時に、他に動けるスレッドがいなかったらスレッド起動して、他のgoroutineが動けるようにします。 | |
他のスレッドがすでにあって眠っていたら、それを起こしてgoroutineを実行させます。 | |
なので、ブロックする処理としない処理を混ぜてもいい感じに動くのです。 | |
で、その、スレッドを作ったり起動したりするのが実はちょっとだけ重いので、ベンチマーク結果を良くするためにはその処理が走らないように、 |
package MyValidator; | |
use strict; | |
use warnings; | |
use parent 'Exporter'; | |
use FormValidator::Lite; | |
use Clone qw/clone/; |
#!/usr/bin/env perl | |
use Mojolicious::Lite; | |
get '/' => sub {} => 'index'; | |
post '/' => sub { | |
my $self = shift; | |
# is valid? | |
if ( $self->param('text') eq 'hoge' ) { |
<html> | |
<head> | |
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script> | |
<script type="text/javascript"> | |
$( function() { | |
$('#hello').click( | |
function() { | |
$.ajax({ | |
url: "http://localhost:3000/hello.js", | |
type: "GET", |
package MyApp::CLI; | |
use Mojo::Base qw/Mojolicious::Command/; | |
# 他にサブコマンド間で共通の処理があれば実装する | |
# sub util_foo { "foo" } | |
# ... | |
1; |