2010-10-23 27 views
5

Tôi có một câu hỏi liên quan đến việc triển khai thực hiện trên Linux.cách pthreads trên linux được hiển thị bằng cách lên lịch

Giả sử quy trình có 5 chuỗi. Bây giờ, trình lập lịch biểu xem các chủ đề này như thế nào (hoặc không nhìn thấy gì cả). ví dụ: Khi Scheduler được gọi, nó chỉ lên lịch trình chính, và sau đó là onus của quá trình chính để lên lịch giữa mỗi luồng của nó.

Hoặc là theo cách khác, trình lập lịch biểu đó lên lịch mỗi luồng như thể nó là một quá trình riêng biệt.

Trả lời

7

Đối với Linux hiện đại (thực thi pthread NPTL), trình lên lịch biểu đề, một chuỗi được coi là "Quy trình trọng lượng nhẹ". pthread_create được thực hiện theo các cuộc gọi hệ thống clone.

+0

Trong trường hợp đó, quá trình tạo chủ đề cần phải được chuyển ngữ cảnh. Có phải vậy không? –

+0

@Ganesh không nhất thiết. Chủ đề mới có thể chạy trên một lõi khác. Nhưng có, trên một lõi được chuyển đổi từ một chủ đề khác, cho dù trong cùng một quá trình hoặc không phải chịu một chuyển đổi ngữ cảnh. Việc chuyển sang một luồng trong cùng một quy trình có thể rẻ hơn việc chuyển sang một luồng trong một quy trình khác vì bạn có thể không cần phải vô hiệu hóa bảng trang, v.v. –

2

Lịch trình Linux mỗi luồng như thể nó là một Quy trình có phạm vi là PTHREAD_SCOPE_SYSTEM. Việc triển khai nptl có thể sử dụng nhiều CPU.

1

Như Logan đã nói, mọi chuỗi được lập lịch độc lập.

Tuy nhiên, nếu bạn muốn, bạn có thể sử dụng nhóm kiểm soát quy trình Linux để lên lịch nhóm các chuỗi thay thế.

Các nhóm kiểm soát quá trình giúp việc lập lịch biểu kém hiệu quả hơn một chút, nhưng nó có thể công bằng hơn nhiều.

Một cách sử dụng đã trở nên rất phổ biến là đặt tất cả các quy trình và chuỗi được tạo bởi mỗi TTY vào nhóm kiểm soát trên mỗi TTY. Điều này dẫn đến tất cả các ứng dụng đồ họa của người dùng đang được lên lịch ở cùng mức với biên dịch hạt nhân 24-thread của anh ta mà anh ta đã khởi chạy trong một cửa sổ đầu cuối. Các ứng dụng đồ họa nhận được 50% và biên dịch được 50%. Nếu anh ta mở một cửa sổ terminal khác và bắt đầu biên dịch glibc với 24 luồng khác, nó chuyển sang 33% các ứng dụng máy tính để bàn, biên dịch kernel 33% và biên dịch glibc 33%.

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