2012-03-08 22 views
8

ví dụ:Bản thân webworker có đa luồng không?

 

worker.postMessage(data1); 
worker.postMessage(data2); 
 

Và bên trong webwoker, giả sử có số lượng vấn đề cần được giải quyết, sẽ worker.postMessage(data2) khối trước khi hoàn tất data1

+0

Nhân viên của bạn làm việc gì? Tính toán? Ajax? –

Trả lời

5

Một công nhân đơn lẻ thực hiện nhiệm vụ của mình trong hàng đợi, ví dụ: một nhiệm vụ lúc. Hãy thử ví dụ sau:

<!DOCTYPE html> 

<script> 

var worker = new Worker('worker.js'); 
worker.postMessage({ task: 1, iterations: 100 }); // very slow task 
worker.postMessage({ task: 2, iterations: 1 }); // very quick task 
worker.onmessage = function(event) { 
    console.log(event.data); 
}; 

</script> 

worker.js:

self.onmessage = function(event) { 
    for (var i = 0; i < event.data.iterations * 1000 * 1000 * 10; i++) {}; 
    self.postMessage("Finished task " + event.data.task); 
} 

Ouput:

Finished task 1 
Finished task 2 

Nhiệm vụ luôn hoàn thành theo thứ tự, tức là đầu tiên một chậm, sau đó một cách nhanh chóng . (Nếu nhiệm vụ được thực hiện song song, nhiệm vụ thứ hai sẽ hoàn thành trước với lề rõ ràng.)

(Chỉ cần rõ ràng: gọi postMessage luôn chặn trong ngữ cảnh thực thi của nó). ", bởi vì gửi tin nhắn chính nó là rất nhanh chóng hoạt động. Đó có thể không phải là những gì bạn yêu cầu.)

Lưu ý: Chrome ném ngoại lệ bảo mật nếu bạn cố tải worker.js từ đĩa cục bộ, hoạt động trong Safari & Firefox.