sleep-sort.example.com
$numbers = array_map('intval', (array)$_GET['numbers']);
$mh = curl_multi_init();
foreach($numbers as $number){
$ch_list[$number] = curl_init("http://sleep-sort-api.example.com/?number=".$number);
curl_setopt($ch_list[$number], CURLOPT_TIMEOUT, $number+1);
curl_multi_add_handle($mh, $ch_list[$number]);
}
$active = null;
echo '<html><head><title>sleep sort</title></head><body><ol>';
do {
curl_multi_exec($mh, $active);
$ready=curl_multi_select($mh);
if($ready){
while($info=curl_multi_info_read($mh)){
echo '<li>'.floor(curl_getinfo($info['handle'], CURLINFO_TOTAL_TIME)).'</li>';
}
}
} while ($active && $ready);
echo '</ol></body></html>';
sleep-sort-api.example.com
$number = intval($_GET['number']); sleep($number); echo $number; exit;
こんな感じ?動作確認はしてない。間違ってもapi側を海の向こうに置いたりしてはいけない。多い日もnumberの数だけサーバを立ててスケールアウトすれば安心。ただしトラフィックでネットワークは死ぬ。或いは
function sleep_sort($numbers){
$max = max($numbers);
foreach($numbers as $number){
$buckets[$number] = $number;
}
$start = time();
for($i=1; $i<=$max; $i++){
$now = time()-$start;
if($buckets[$now]){
$result[] = $now;
}
}
return $result;
}
Genius sorting algorithm: Sleep sort
バケットソート
真っ当にpcntlを使う版 PHPでsleep sort
先駆者 凄いバカなプログラム
| ホーム |
