Tôi đã quyết định tìm hiểu cách đa luồng được thực hiện bằng Python, và tôi đã so sánh để xem loại hiệu năng nào tôi có được trên CPU lõi kép. Tôi thấy rằng mã đa luồng đơn giản của tôi thực sự chạy chậm hơn so với tuần tự tương đương, và tôi không thể hiểu tại sao.Threading Python bất ngờ chậm hơn
Các thử nghiệm tôi contrived là để tạo ra một danh sách lớn các số ngẫu nhiên và sau đó in tối đa
from random import random
import threading
def ox():
print max([random() for x in xrange(20000000)])
ox()
mất khoảng 6 giây để hoàn thành trên của tôi Intel Core 2 Duo, trong khi ox();ox()
mất khoảng 12 giây.
Sau đó tôi đã thử gọi hàm ox() từ hai luồng để xem tốc độ hoàn thành nhanh như thế nào.
def go():
r = threading.Thread(target=ox)
r.start()
ox()
go()
mất khoảng 18 giây để hoàn thành, với hai kết quả được in trong vòng 1 giây. Tại sao điều này nên chậm hơn?
Tôi nghi ngờ ox()
đang được tự động song song, vì tôi xem tab hiệu suất của trình quản lý tác vụ Windows và gọi ox()
trong bảng điều khiển python của tôi, cả hai bộ xử lý sẽ chuyển sang sử dụng 75% cho đến khi hoàn thành. Liệu Python có tự động song song những thứ như max()
khi nó có thể?
Cần lưu ý rằng luồng vẫn hữu ích trong Python đối với một số loại nhiệm vụ nhất định, chẳng hạn như các hoạt động I/O-bound. –