Upload
takesako
View
3.240
Download
3
Embed Size (px)
DESCRIPTION
setTimeout
Citation preview
常識を覆すソートアルゴリズムSleep sort
常識を覆すソートアルゴリズムSleep sort
サイボウズ・ラボ / Shibuya.pm
竹迫 良範 @TAKESAKO
Cybozu University 22009/04/06
常識を覆すソートアルゴリズム Sleep sort常識を覆すソートアルゴリズム Sleep sort
実行方法
#!/bin/bashfunction f() { sleep "$1" && echo "$1"}while [ -n "$1" ]do f "$1" & shiftdonewait
$ ./sleepsort.bash 5 4 3 2 1
Cybozu University 42009/04/06
4ch BBS
Cybozu University 52009/04/06
Cybozu University 62009/04/06
Cybozu University 72009/04/06
Cybozu University 82009/04/06
Cybozu University 92009/04/06
package main
import ( "os" "strconv" "syscall")
func main() { args := os.Args[1:]
done := make(chan int64) for _, arg := range args { i, _ := strconv.Atoi64(arg) go func(i int64) { syscall.Sleep(i * 1e9) done <- i }(i) } for _ = range args { println(<-done) }}
Cybozu University 102009/04/06
setTimeout でSleep sort を実装してみた
JavaScript 版 Sleep sort ( 1000 ミリ秒単位)JavaScript 版 Sleep sort ( 1000 ミリ秒単位)
実行方法
function sleep_sort(a) { for(var i = 0; i < a.length; i++){ callback( a[i] ); } function callback(n) { setTimeout( function(){ document.body.innerHTML += n + "<br>\n"; }, n * 1000) }}
sleep_sort([5,4,3,2,1,0]);
ブラウザで実際に動かしてみるブラウザで実際に動かしてみる
setTimeout(f, n * 1000) バージョン
高速 JavaScript 版 Sleep sort ( 1 ミリ秒単位)高速 JavaScript 版 Sleep sort ( 1 ミリ秒単位)
実行方法
function sleep_sort(a) { for(var i = 0; i < a.length; i++){ callback( a[i] ); } function callback(n) { setTimeout( function(){ document.body.innerHTML += n + "<br>\n"; }, n * 1) }}
sleep_sort([11,12,5,4,3,13,2,1,0,9,8,7,6,10]);
本当に動くのかブラウザで実際に動かしてみる本当に動くのかブラウザで実際に動かしてみる
setTimeout(f, n * 1) ミリ秒バージョン
手元の環境で setTimeout の分解能を調べてみた手元の環境で setTimeout の分解能を調べてみた
setTimeout 分解能 単位 OS
IE n 0,1,2,3… ミリ秒
Windows7
Firefox (n+5)*2 10,12,14… ミリ秒
Windows7
Opera (n+1)*2 2,4,6,8… ミリ秒
Windows7
Chrome (n+1)*2 2,4,6,8… ミリ秒
Windows7
※ タブの表・裏や OS など環境によって差があります
※ クロスブラウザ対応とはこういうこと?※ クロスブラウザ対応とはこういうこと?
setTimeout(f, (n+5) * 2) ミリ秒バージョン
Cybozu University 172009/04/06
Node.js
Node.js 版 Sleep sort ( 10 ピコ秒単位)Node.js 版 Sleep sort ( 10 ピコ秒単位)
実行方法
function sleep_sort(a) { for(var i = 0; i < a.length; i++) { callback( a[i] ); } function callback(n) { setTimeout( function(){ console.log(n); } , (n+1) * 1e-8) }}sleep_sort(process.argv.slice(2));
$ node sort.js 5 4 3 2 1 0
Node.js の setTimeout 分解能(およそ)Node.js の setTimeout 分解能(およそ)
setTimeout 分解能 単位 OS
IE n 0,1,2,3… ミリ秒
Windows7
Firefox (n+5)*2 10,12,14… ミリ秒
Windows7
Chrome (n+1)*2 2,4,6,8… ミリ秒
Windows7
Node.js (n+1)*1e-8 10,20,30… ピコ秒
CentOS 5.6
SpiderMonkey
N/A ReferenceError:setTimeout is not defined
※ タブの表・裏や OS など環境によって差があります
Cybozu University 202009/04/06
Node.js最速伝説