2015-11-18 14 views
5

Tôi đã luôn nghĩ rằng các công nhân web tạo ra các chủ đề riêng biệt, nhưng hôm nay tôi đã chạy vào spec trên trang web w3c. Dưới đây là một trích dẫn về nhân viên web:Công nhân Web - chúng có tạo ra các chủ đề thực tế không?

Điều này cho phép hoạt động giống như luồng với thông điệp như cơ chế phối hợp .

Câu hỏi đặt ra là - nếu nó là giống như, không phải chuỗi thực tế là lợi thế (hiệu suất khôn ngoan) khi sử dụng công nghệ này là gì?

Mọi trợ giúp sẽ được đánh giá cao!

+0

Câu trả lời được chấp nhận là gây hiểu lầm. Xem câu trả lời của tôi. – slebetman

Trả lời

2

Có, nhân viên web tạo chủ đề thực tế (hoặc quy trình, thông số kỹ thuật linh hoạt về điều này). Theo đặc tả Web Workers, khi một nhân viên được tạo ra bước đầu tiên là:

  1. Tạo một môi trường thực thi song song riêng biệt (tức là một chủ đề riêng biệt hoặc quá trình hoặc cấu trúc tương đương), và chạy các phần còn lại của các bước sau trong bối cảnh đó.

    Vì mục đích của API thời gian, đây là thời điểm chính thức của việc tạo nhân viên.

(W3C Web Workers đặc điểm kỹ thuật phần 4,4)

Vì vậy, nó được quy định một cách rõ ràng rằng mã chạy trong Web Workers chạy trong chủ đề hoặc các quá trình thực tế.

Mặc dù có thể triển khai Công nhân không có chủ đề (lưu ý ngôn ngữ "cấu trúc tương đương") để sử dụng trên các hệ thống không hỗ trợ chủ đề, tất cả triển khai trình duyệt đều triển khai Web Workers làm luồng.

1

Theo MDN,

Web Workers là một cơ chế mà theo đó một hoạt động kịch bản có thể được thực hiện để chạy trong một thread nền tách biệt với chủ đề thực hiện chính của một ứng dụng web. Ưu điểm của việc này là xử lý mất thời gian có thể được thực hiện trong một luồng riêng biệt, cho phép luồng chính (thường là giao diện người dùng) chạy mà không bị chặn/làm chậm lại.

Vì vậy, mỗi công nhân không tạo ra một chuỗi riêng biệt, nhưng tất cả công nhân đang chạy trong một chuỗi riêng biệt.

Tôi đoán, giống như những thứ khác, việc triển khai và tiếp cận có thể khác với trình duyệt.

+0

Vì vậy, công nhân web có tạo chủ đề thực tế không? – andrey

+1

@andrey Có vẻ như họ không. –

+1

Tôi nghĩ câu trả lời này chỉ là một cách giải thích có thể có về nội dung MDN. Nó không phải là rõ ràng của * thread nền tách biệt từ thread thực hiện chính * đề cập đến thread cho mỗi 'Worker' dụ, hoặc thread cho mỗi quá trình trình duyệt. Tuy nhiên cả hai cách giải thích đều có thể. –

1

Một nhân viên web chạy trong một chủ đề duy nhất được phân lập từ các chủ đề chính, cách họ vượt qua các thông điệp xung quanh là thread-như và các công trình khác nhau tùy thuộc vào việc bạn đang sử dụng chuyên dụng (chỉ có thể được truy cập từ các kịch bản tạo ra nó) hoặc chia sẻ (có thể được truy cập bởi bất kỳ kịch bản nào trong cùng một tên miền thông qua một đối tượng cổng) công nhân.

EDIT: Câu trả lời được cập nhật để phản ánh nhận xét của tôi từ vài tháng trước. Trong khi một nhân viên web SINGLE chạy trong một chủ đề bị cô lập, nó không có nghĩa là mỗi nhân viên bổ sung sẽ chạy trong cùng một luồng.

+0

Cảm ơn! Đây có phải là "chuỗi phân lập đơn lẻ" dành riêng cho công nhân web không? Riêng với chuỗi giao diện người dùng? – andrey

+0

@Dontfeedthecode hiện chủ đề đơn độc lập có nghĩa là chỉ có một sợi cho tất cả các công nhân? –

+0

@Dontfeedthecode Vì vậy, sử dụng nhiều công nhân không có lợi ích. –

Các vấn đề liên quan