Chủ Nhật, 22 tháng 9, 2013

Vòng đời của một Thread


Tại bất kì một thời điểm nào, một thread có thể nằm trong một vài trạng thái của thread (thread states) - minh hoạ trong UML state diagram trong Fig.26.1 .

New and Runnable States

Một new thread bắt đầu vòng đời của nó trong new state. Nó duy trì trạng thái đó cho đến khi chương trình starts thread, những gì đặt trong runnable state. Một thread trong runnable state được biết đến như là đang thực thi công việc của nó.

Waiting State

Thỉnh thoảng một runnable thread chuyển sang waiting state trong khi nó chờ đợi thread khác thực thi một công việc. một waiting thread chuyển ngược trở lại runnable state chỉ khi thread khác thông báo rằng nó (thread đang chờ) có thể tiếp tục thực thi.

Timed Waiting State

Một runnable thread có thể gia nhập timed waiting state trong một khoảng thời gian xác định. Nó chuyển đổi ngược trở lại thành runnable state khi khoảng thời gian chờ hết hiệu lực hoặc khi sự kiện nó đang chờ xảy ra. Timed waiting waiting threads không thể sử dụng một processor, thậm chí nó available. Một runnable thread có thể chuyển đến timed waiting state nếu nó cung cấp một khoảng thời gian chờ khi nó đang chờ đợi một thread khác thực thi một công việc. Những thread như vậy quay trở về runnable state khi nó được thông báo bởi một thread khác hoặc khi thời gian chờ hết hiệu lực - bất cứ cái nào đến trước. Một cách khác để đặt một thread trong timed waiting state là đặt một runnable thread trong trạng thái ngủ. Một sleep thread duy trì trong timed waiting state trong một khoảng thời gian xác định (được gọi là một sleep interval), sau khoảng thời gian này nó quay trở về runnable state. Threads sleep khi chúng không có công việc để thực hiện trong giây lát. Ví dụ, một word processor có thể chứa một thread mà back up định kỳ document hiện hành lên đĩa cho mục đích khôi phục dữ liệu. Nếu thread này không sleep giữa những lần backups thành công, nó có thể yêu cấu một loop để xác định xem có nên chép document lên đĩa hay không. Loop này có thể ngốn processor time mà không làm được công việc nào hiệu quả, do đó giảm system performance. Trong trường hợp này, một giải pháp hiệu quả là cho thread chỉ định một sleep interval (bằng với khoảng thời gian giữa các lần backups thành công) và sau đó gia nhập vào timed waiting state. Thread này có thể được trả về runnable state khi sleep interval của nó hết hạn, ở những thời điểm nó chép bản sao của document lên đĩa và gia nhập lại timed waiting state.

Blocked State

Một runnable thread chuyển sang blocked state khi nó cố gắng thực hiện một công việc mà khổng thể được hoàn thành ngay lập tức mà nó phải tạm thời chờ cho đến khi cho đến khi công việc đó hoàn thành. Ví dụ, khi một thread giải quyết một I/O request, OS blocks thread đang thực thi cho đến khi I/O request hoàn thành

Terminated State

Một runnable thread gia nhập terminated state (thỉnh thoảng được gọi là dead state) khi nó hoàn thiện thành công công việc của nó hoặc kết thúc vì một lý do khác (có thể là do lỗi )