Một số người sẽ nói rằng hai chủ đề là quá nhiều - tôi không hoàn toàn ở trong trại đó :-]
Đây là lời khuyên của tôi: Đo lường, đừng đoán. Một gợi ý là làm cho nó có thể định cấu hình và ban đầu đặt nó thành 100, sau đó phát hành phần mềm của bạn ra tự nhiên và theo dõi những gì xảy ra.
Nếu việc sử dụng chủ đề của bạn đạt đỉnh ở mức 3, thì 100 là quá nhiều. Nếu nó vẫn ở mức 100 trong hầu hết thời gian trong ngày, hãy tăng tới 200 và xem điều gì sẽ xảy ra.
Bạn thực sự có thể có mã của mình theo dõi việc sử dụng và điều chỉnh cấu hình cho lần tiếp theo nó bắt đầu nhưng điều đó có lẽ là quá mức cần thiết.
Để làm rõ và xây dựng:
Tôi không ủng hộ việc lăn hệ thống con gộp chủ đề của riêng bạn, bằng mọi cách sử dụng hệ thống bạn có. Nhưng, vì bạn đang hỏi về một điểm giới hạn tốt cho các chủ đề, tôi cho rằng việc triển khai nhóm chủ đề của bạn có khả năng giới hạn số lượng chủ đề tối đa được tạo [đó là một điều tốt].
Tôi đã viết mã gộp kết nối chủ đề và cơ sở dữ liệu và chúng có các tính năng sau [mà tôi tin là rất cần thiết cho hiệu suất]:
- Một số lượng tối thiểu của các luồng hoạt động.
- Một số lượng tối đa của các luồng.
- Tắt các chủ đề chưa được sử dụng trong một thời gian.
Đầu tiên đặt đường cơ sở cho hiệu suất tối thiểu theo máy khách nhóm luồng [số lượng chủ đề này luôn có sẵn để sử dụng]. Thứ hai đặt ra một hạn chế về việc sử dụng tài nguyên bằng các luồng hoạt động. Thứ ba đưa bạn trở lại đường cơ sở trong thời gian yên tĩnh để giảm thiểu việc sử dụng tài nguyên.
Bạn cần cân bằng việc sử dụng tài nguyên có các luồng không sử dụng [a] so với việc sử dụng tài nguyên không có đủ luồng để thực hiện công việc [b].
. [B] Nói chung sẽ là một sự chậm trễ trong việc xử lý các yêu cầu khi chúng đến khi bạn cần chờ một chủ đề có sẵn.
Đó là lý do tại sao bạn đo lường. Khi bạn tuyên bố, phần lớn các chủ đề của bạn sẽ chờ phản hồi từ cơ sở dữ liệu để chúng không chạy. Có hai yếu tố ảnh hưởng đến số lượng chủ đề bạn nên cho phép.
Đầu tiên là số lượng kết nối DB có sẵn. Đây có thể là một giới hạn cứng trừ khi bạn có thể tăng nó tại DBMS - Tôi sẽ cho rằng DBM của bạn có thể có số lượng kết nối không giới hạn trong trường hợp này [mặc dù bạn cũng nên đo lường điều đó].
Sau đó, số lượng chủ đề bạn nên phụ thuộc vào việc sử dụng lịch sử của bạn. Tối thiểu bạn nên chạy là số tối thiểu mà bạn đã từng chạy + một%, với mức tối thiểu tuyệt đối [ví dụ, và làm cho nó có thể định cấu hình giống như A] 5.
Số lượng chủ đề tối đa phải là tối đa lịch sử + B%của bạn.
Bạn cũng nên theo dõi các thay đổi hành vi. Nếu, vì một số lý do, việc sử dụng của bạn lên tới 100% có sẵn trong một thời gian đáng kể [do đó nó sẽ ảnh hưởng đến hiệu suất của khách hàng], bạn nên tăng mức tối đa được phép cho đến khi nó một lần nữa B% cao hơn.
Đáp lại "chính xác thì tôi nên đo lường điều gì?" câu hỏi:
Những gì bạn nên đo cụ thể là lượng chủ đề tối đa trong sử dụng đồng thời [ví dụ: chờ đợi khi trả lại từ cuộc gọi DB] theo tải. Sau đó, thêm hệ số an toàn 10% chẳng hạn [nhấn mạnh, vì các áp phích khác dường như lấy các ví dụ của tôi làm khuyến nghị cố định].
Ngoài ra, điều này nên được thực hiện trong môi trường sản xuất để điều chỉnh. Không sao để có được một ước tính trước nhưng bạn không bao giờ biết sản phẩm nào sẽ ném theo cách của bạn [đó là lý do tại sao tất cả những thứ này nên được cấu hình trong thời gian chạy]. Điều này là để bắt gặp một tình huống như tăng gấp đôi bất ngờ các cuộc gọi của khách hàng đến.
Tôi có một chương trình Python sử dụng mô -đun luồng và chạy đa luồng thực thi chức năng. Số 8 dưới đây là số lượng luồng trong chương trình nhưng tôi cần biết số lượng luồng mà thiết bị của tôi có thể xử lý để chạy chương trình càng nhanh càng tốt.
Đây là phần liên quan trong chương trình Python của tôi:
for i in range[8]:
t = ThreadUrl[q]
t.setDaemon[True]
t.start[]
Trong đó q = queue.Queue[]
Dữ liệu CPU thiết bị của tôi là [sử dụng lệnh lscpu
trong Ubuntu 18.04]:
Architecture: x86_64
CPU op-mode[s]: 32-bit, 64-bit
Byte Order: Little Endian
CPU[s]: 8
On-line CPU[s] list: 0-7
Thread[s] per core: 2
Core[s] per socket: 4
Socket[s]: 1
NUMA node[s]: 1
Vendor ID: GenuineIntel
CPU family: 6
Model: 94
Model name: Intel[R] Core[TM] i7-6700HQ CPU @ 2.60GHz
Stepping: 3
CPU MHz: 1899.473
CPU max MHz: 3500.0000
CPU min MHz: 800.0000
BogoMIPS: 5184.00
Virtualization: VT-x
L1d cache: 32K
L1i cache: 32K
L2 cache: 256K
L3 cache: 6144K
NUMA node0 CPU[s]: 0-7
Bạn có thể cho tôi biết số lượng chủ đề của tôi có thể xử lý mà không gây ra vấn đề gì không? Và làm thế nào được tính toán xin vui lòng?
Đã hỏi ngày 4 tháng 3 năm 2019 lúc 20:28Mar 4, 2019 at 20:28
4
Bạn có thể cho tôi biết số lượng chủ đề của tôi có thể xử lý mà không gây ra vấn đề gì không?
I7-6700HQ là bộ xử lý 4 lõi. Mỗi cốt lõi hỗ trợ Intel® Hyper-Threading Technology
. Điều này có nghĩa là bộ xử lý của bạn có thể hỗ trợ 8 luồng.
Số 8 dưới đây là số lượng luồng trong chương trình nhưng tôi cần biết số lượng luồng mà thiết bị của tôi có thể xử lý để chạy chương trình càng nhanh càng tốt.
Mã của bạn đã được tối ưu hóa cho phần cứng bạn có.
Đã trả lời ngày 4 tháng 3 năm 2019 lúc 20:37Mar 4, 2019 at 20:37
RamhoundramhoundRamhound
39,7K34 Huy hiệu vàng97 Huy hiệu bạc124 Huy hiệu đồng34 gold badges97 silver badges124 bronze badges
4