Tôi có một COM được viết bằng Delphi 101 Berlin. Và tôi viết một kịch bản để gọi API của nó (chỉ một API, một luồng và mỗi lần mất khoảng 1 phút để hoàn thành).Làm cách nào để hệ điều hành có thể sử dụng tất cả các lõi cho ứng dụng của tôi?
Tôi chạy tệp vbs bằng cscript.exe (64 bit) (và tôi sử dụng simple job runner here), nhiều bản sao (vì vậy có nhiều quy trình), cùng một lúc.
Tuy nhiên, tôi đã thử nghiệm trên nhiều PC (Windows 10 Pro), và nó được quan sát thấy rằng chỉ có khoảng 1 lõi đang chạy mặc dù nó có nhiều lõi.
Ví dụ, trên 2 CPU của tôi (HPZ800 Intel Xeon X5650, 6 lõi mỗi = 12 lõi), chỉ có 1 lõi đang được sử dụng.
Nếu một số tập lệnh thoát sớm, thì việc sử dụng CPU còn lại sẽ được cải thiện, nhưng tất cả cùng nhau tổng không quá 1 lõi.
Câu hỏi của tôi, là cách viết mã để hưởng lợi từ nhiều lõi?
Bạn nói "Tôi chạy tệp VBS bằng cscript.exe ... nhiều bản sao (vì vậy có nhiều quy trình)". Bạn có bất kỳ bằng chứng nào cho thấy có nhiều quá trình được chia nhỏ/sinh ra bởi cscript.exe không? Có vẻ khá rõ ràng với tôi rằng dự án của bạn đang chạy như một quá trình đơn luồng. –
như bạn có thể thấy trong ảnh chụp màn hình, có rất nhiều bản sao của cscript.exe (quy trình), trên ứng dụng của tôi, nó là đơn luồng. –
Ngoài ra, chỉ vì có nhiều quy trình đang chạy, điều này không có nghĩa là bạn sẽ tối đa hóa CPU của mình. Nó phụ thuộc vào bản chất của quá trình. Nếu mỗi quá trình chỉ làm một giấc ngủ() trong 60 giây, bạn có thể có hàng ngàn người trong số họ mà không làm phiền CPU của bạn cả. –