Tôi đã viết một tập lệnh Python chỉ đơn giản là quay vòng một số luồng và ghi các chu kỳ CPU. Ý tưởng là để kiểm tra các nhiệm vụ chống lại nó, vì nó khá đơn giản.
#!/usr/bin/env python
import threading
def cycle_burner():
while True:
meh = 84908230489 % 323422
for i in range(3):
thread = threading.Thread(target=cycle_burner)
print "Starting a thread"
thread.start()
Chỉ cần chạy tập lệnh Python sẽ tiêu tốn khoảng 150% mức sử dụng CPU.
[~/cbench]$ ./burn_cycles.py
Starting a thread
Starting a thread
Starting a thread
Khởi chạy tập lệnh Python của tôi với tasket hoạt động như mong đợi. Xem hàng đầu cho thấy quá trình Python được chốt ở mức sử dụng 100%.
[~/cbench]$ taskset -c 0 ./burn_cycles.py
Starting a thread
Starting a thread
Starting a thread
Thật thú vị, khởi chạy tập lệnh Python và sau đó ngay lập tức sử dụng bộ tác vụ để đặt mối quan hệ của quy trình mới bắt đầu, giới hạn quy trình ở mức 100%. Lưu ý từ đầu ra rằng bộ lập lịch Linux đã hoàn thành việc thực hiện các lệnh Bash trước khi sinh ra các luồng Python. Vì vậy, quá trình Python đã được bắt đầu, sau đó nó được thiết lập để chạy trên CPU 0, sau đó nó sinh ra các luồng của nó, kế thừa mối quan hệ thích hợp.
[~/cbench]$ ./burn_cycles.py &; taskset -pc 0 `pgrep python`
[1] 8561
pid 8561's current affinity list: 0-3
pid 8561's new affinity list: 0
Starting a thread
[~/cbench]$ Starting a thread
Starting a thread
Kết quả đó tương phản với phương thức này, hoàn toàn giống nhau nhưng cho phép các luồng Python sinh ra trước khi thiết lập mối quan hệ của quy trình Python. Điều này sao chép kết quả "tasket does nothing" mà tôi đã mô tả ở trên.
[~/cbench]$ ./burn_cycles.py &
[1] 8996
[~/cbench]$ Starting a thread
Starting a thread
Starting a thread
[~/cbench]$ taskset -pc 0 `pgrep python`
pid 8996's current affinity list: 0-3
pid 8996's new affinity list: 0
Có chuyện gì ở đây vậy?
Rõ ràng các chủ đề xuất hiện trước khi mối quan hệ của quá trình cha mẹ bị thay đổi không kế thừa mối quan hệ của cha mẹ chúng. Nếu ai đó có thể chỉnh sửa trong một liên kết đến tài liệu giải thích điều này, điều đó sẽ hữu ích.