2013-12-12 25 views
7

Trong libuv, bạn có thể kết thúc lên các chủ đề công nhân với quá nhiều công việc hoặc mã lỗi. Có một chức năng đơn giản mà có thể kiểm tra sức khỏe của các chủ đề công nhân hoặc hàng đợi thread? Nó không phải là 100% xác định, sau khi tất cả nó sẽ không thể xác định liệu các sợi công nhân được treo trên mã chậm hoặc một vòng lặp vô hạn.chủ đề công việc libuv hoặc kiểm tra sức khỏe hàng đợi công việc?

Vì vậy, bất kỳ chẩn đoán sau đây sẽ là tốt:

  • Số ảnh đang đợi vẫn chưa làm việc trên. Nếu điều này quá lớn, nó có thể có nghĩa là các luồng công nhân đang bận hoặc treo.

  • Liệu libuv có bất kỳ cơ chế giết luồng nào trong đó nếu chuỗi công nhân không kiểm tra lại sau n giây, nó sẽ bị chấm dứt?

+0

bạn có sử dụng libuv như một phần của ứng dụng node.js hay độc lập không? –

Trả lời

1

Chức năng đó không tồn tại trong chính libuv và tôi không biết bất kỳ PMNM nào cung cấp một cái gì đó tương tự.

Xét về một cơ chế tiêu diệt, có được không nướng vào libuv, nhưng http://nikhilm.github.io/uvbook/threads.html#core-thread-operations gợi ý:

Một chương trình được thiết kế tốt sẽ có một cách để chấm dứt dài chạy công nhân đó đã bắt đầu thực hiện. Một công nhân như vậy có thể định kỳ kiểm tra một biến mà chỉ có quá trình chính đặt thành chấm dứt tín hiệu.

-1

Nếu điều này là dành cho nút, thì một chuỗi màn hình đơn giản sẽ làm gì? Tôi không biết một cách để có được thông tin về internals hàng đợi sự kiện, nhưng bạn có thể tiêm một dấu vết vào hàng đợi sự kiện để theo dõi các chủ đề đang được chạy một cách kịp thời. (Các biện pháp này không phải do số lượng các chủ đề chưa được chạy, nhưng theo các chủ đề đang chạy đúng thời hạn. Điều tương tự, loại.)

Chủ đề màn hình có thể tự xếp hàng lại và kiểm tra xem nó có được gọi hay không ít nhất mỗi 10 mili giây (hoặc bất kỳ ms chặn tích lũy tối đa nào được phép). Kể từ khi nodej chạy thread round-robin, nếu thread màn hình được chạy đúng thời gian, nó cho chúng ta biết rằng tất cả các luồng khác có cơ hội chạy trong cùng một cửa sổ 10 ms đó. Một cái gì đó giống như (trong nút):

// like Date.now(), but with higher precision 
// the extra precision is needed to be able to track small delays 
function dateNow() { 
    var t = process.hrtime(); 
    return (t[0] + t[1] * 1e-9) * 1000; 
} 

var _lastTimestamp = dateNow(); // when healthMonitor ran last, in ms 
var _maxAllowedDelay = 10.0;  // max ms delay we allow for our task to run 
function healthMonitor() { 
    var now = dateNow(); 
    var delay = now - _lastTimestamp; 
    if (delaly > _maxAllowedDelay) { 
     console.log("healthMonitor was late:", delay, " > ", _maxAllowedDelay); 
    } 
    _lastTimestamp = now; 
    setTimeout(healthMonitor, 1); 
} 

// launch the health monitor and run it forever 
// note: the node process will never exit, it will have to be killed 
healthMonitor(); 

Điều chỉnh thông báo cảnh báo và hỗ trợ tắt máy sạch sẽ là một bài tập dành cho người đọc.

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