Другая симуляция потоков, которую я нашел достаточно стабильной, - это использование изображения. Который, кажется, загружается в другой поток в браузере (?). Однако ваш обратный вызов javascript будет работать всегда последовательно.
Здесь ниже загружено 500 из них.
<html>
<head>
<title>so</title>
<style></style>
</head>
<script>
function callBack(img){
var i = 0, img, res = document.getElementById('res'),
fn = function(cnt){
var img = document.createElement('img');
img.onerror = function(ev){
res.innerHTML += cnt + ', ';
document.body.removeChild(img);
};
img.src = 'javascript:void(0)';
document.body.appendChild(img);
};
do{
fn(i++);
}while(i<500);
}
</script>
<body onload="callBack()">
<div id="res"></div>
</body>
</html>