Có cách nào để tôi chia sẻ một biến giữa hai nhân viên web không? (Web workers về cơ bản chủ đề theo Javascript)Chia sẻ các biến giữa các nhân viên web? [global variables?]
Trong các ngôn ngữ như C# bạn có:
public static string message = "";
static void Main()
{
message = "asdf";
new Thread(mythread).Run();
}
public static void mythread()
{
Console.WriteLine(message); //outputs "asdf"
}
Tôi biết thats một tấm gương xấu, nhưng trong ứng dụng Javascript của tôi, tôi có một sợi làm phép tính nặng có thể được trải rộng trên nhiều chủ đề [vì tôi có một đoạn dữ liệu lớn ở dạng mảng. Tất cả các phần tử của mảng đều độc lập với nhau. Nói cách khác, chủ đề công nhân của tôi không phải quan tâm đến việc khóa hay bất cứ thứ gì tương tự]
Tôi đã tìm thấy cách duy nhất để "chia sẻ" một biến giữa hai luồng là tạo Getter/setter [qua prototyping] và sau đó sử dụng postMessage/onmessage ... mặc dù điều này có vẻ không hiệu quả [đặc biệt là với các đối tượng, mà tôi phải sử dụng JSON cho AFAIK]
LocalStorage/Database đã được lấy ra khỏi đặc tả HTML5 vì nó có thể dẫn đến deadlocks, do đó, không phải là một lựa chọn [buồn bã] ...
Khả năng khác mà tôi đã tìm thấy là sử dụng PHP để thực sự có các trang getVariable.php và setVariable.php, sử dụng localstorage để lưu trữ i nts/strings ... một lần nữa, các đối tượng [bao gồm mảng/null] phải được chuyển đổi thành JSON ... và sau đó, JSON.parse() 'd.
Theo như tôi biết, Javascript đề người lao động được hoàn toàn tách ra từ trang chính chủ đề [đó là lý do javascript đề người lao động không thể truy cập phần tử DOM
Mặc dù postMessage hoạt động, đó là chậm.
Cảm ơn!
Nếu có cách nào để chia sẻ các giá trị phi "nguyên tử" giữa người lao động, ngữ nghĩa của những giá trị đó sẽ không thể sử dụng với kết quả dự đoán <-. Hoàn toàn sai trong mọi phương diện. – Tony
Chăm sóc để xây dựng? –
Thuật toán hiệu bánh của Lamport. Dijkstra bảo vệ logic lệnh. Tất cả chỉ dành riêng cho khả năng dự đoán không xác định được. – Tony